Почему эта сумма цифр в C не работает - PullRequest
0 голосов
/ 21 марта 2019

Я должен сделать код для школы, который считает сумму цифр.Так как он должен работать с большими числами (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;
}

Ответы [ 2 ]

0 голосов
/ 21 марта 2019
 while(1){
    while(sum != 0){
        x = x + sum % 10;
        sum = sum/10;
    }
    if(x > 10){
        sum = x;
    }
    else{
        break;
    }
}

Проблема в том, что значение x не сбрасывается обратно до 0 после каждой итерации внешнего цикла while.Так как вы не сбрасываете обратно, вы столкнетесь с проблемой переполнения int.Я думаю, вы должны быть осторожны, когда вы играете с такими итерациями цикла.

Вы можете изменить код так, как описано в @ ccxxshow.

0 голосов
/ 21 марта 2019

Значение x должно быть сброшено до 0 в то время как блок

while(1) {
    x = 0; // add here
    while (sum != 0) {
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...