为什么C中的这个数字总和不起作用

时间:2019-03-21 09:31:28

标签: c string sum

我必须为学校编写一个计算数字总和的代码。由于它必须要处理大数(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;
}

2 个答案:

答案 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描述的方式。