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

问题描述 投票:0回答:2

我必须为学校做一个计算数字总和的代码。因为它必须使用大数字(80 000位+)我必须首先计算为数组,因为即使在long long 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;
}
c string sum
2个回答
0
投票

在块中,x值应重置为0

while(1) {
    x = 0; // add here
    while (sum != 0) {
    ...
}

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

© www.soinside.com 2019 - 2024. All rights reserved.