我必须为学校编写一个计算数字总和的代码。由于它必须要处理大数(80 000位数以上),因此我必须首先算作一个数组,因为即使在很长的int中也无法放入这个大数。我的问题是为什么此代码不起作用? (例如,使用较小的数字:10 ^ 100),但是当我尝试使用较大的数字(10 ^ 10000)时,它将无法正常工作。有人可以说出如何帮助我吗?谢谢
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char pole [100000];
int c = 0;
int sum = 0;
int x = 0;
int t;
printf("Nacitaj cislo!\n");
scanf("%s", pole);
printf("Zadal si: %s\n", pole);
while (pole[c] != '\0') {
t = pole[c] - '0';
sum = sum + t;
c++;
}
while(1){
while(sum != 0){
x = x + sum % 10;
sum = sum/10;
}
if(x > 10){
sum = x;
}
else{
break;
}
}
printf("%d\n", x);
return 0;
}
答案 0 :(得分:0)
x块中的x值应重置为0
while(1) {
x = 0; // add here
while (sum != 0) {
...
}
答案 1 :(得分:0)
while(1){
while(sum != 0){
x = x + sum % 10;
sum = sum/10;
}
if(x > 10){
sum = x;
}
else{
break;
}
}
这里的问题是,在每次外部while循环迭代之后,值x都不会重置为 0 。由于您没有重新设置,因此会遇到int溢出的问题。我猜想在进行此类循环迭代时需要小心。
您可以将代码更改为@ccxxshow描述的方式。