
#include<stdio.h>
#define N 100
main()
{int x,y,yu,i,zen
int num[N+3]
printf("请输入被除数!\n")
scanf("%d",&x)
printf("请输入除数!\n")
scanf("%d",&y)
zen=x/y
num[1]='.'
for(i=2i<=N+2i++)
{yu=x%y
num[i]=(yu*10)/y
x=yu*10%y
}
printf("%d.",zen)
for(i=2i<=N+2i++)
{printf("%d",num[i])
if(i%5==0) printf("\n")
}
}
其实它大概的思路如下:
计算出两个大数的长度,并记录最大长度
在共同长度内进行计算,分为进位和不进位两种情况
根据长度较大的大数长出的部分粘到结果,再根据进位情况调整
输出结果
其实个人觉得他的思路虽然没有错,但不够清晰,可以进行一定的改进
#include <stdio.h>int main() {
char addend1[1001] = {0}
char addend2[1001] = {0}
char result[1001] = {0}
int length1, length2, resultLength
int carryOver = 0
int i, mark
printf("请输入第一个加数")
scanf("%s", &addend1)
printf("请输入第二个加数")
scanf("%s", &addend2)
for (length1 = 0 addend1[length1] length1++) // 注意是以分号结尾,求出第一个数的长度
length1-- // 因为后面是计算到length1-1,所以要减1
for (length2 = 0 addend2[length2] length2++) // 求出第二个数的长度
length2--
resultLength = length1 > length2 ? length1 : length2 // 记录最大长度
for (i = 0 i <= resultLength i++) { // 在最大长度内进行计算
if((i <= length1) && (i <= length2)) { // 如果两个数在这个位置都有数
result[resultLength - i] = addend1[length1 - i] - '0' + addend2[length2 - i] + carryOver // 计算该位的值,为两个加数的值之和再加上进位
if(result[resultLength - i] > '9') { // 如果需要进位
carryOver = 1 // 标记有进位,且为1
result[resultLength - i] -= 10 // 减去进1位所需要的10
} else {
carryOver = 0 // 标记无进位
}
} else { // 如果两个数最多只有一个数在这个位置有值,则退出循环
break
}
}
mark = i // 记录一个数比另一个数多出的开始位置
if (i <= length1) { // 如果是第一个数多出的话,那根据第一个数多出的部分计算
while (i <= length1) {
result[resultLength - i] = addend1[length1 - i]
i++
}
}
if (i <= length2) { // 如果是第二个数的话,则根据第二个数计算
while (i <= length2) {
result[resultLength - i] = addend2[length2 - i]
i++
}
}
for(i = mark carryOver i++) { // 如果在多出的位置有进位的话,则根据进位一步一步向前进位,直至没有进位为止
result[resultLength - i] += 1
if (result[resultLength - i] > '9') {
result[resultLength - i] -= 10
} else {
if (i > resultLength) {
printf("1")
}
break
}
}
for (i = 0 i <= resultLength i++) { // 输出结果
if (result[i]) {
printf("%c", result[i])
}
}
return 0
}
欢迎追问,满意请采纳,谢谢
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)