сумма всех цифр числа с использованием цикла while в C

#c

Вопрос:

Я пытаюсь решить проблему (как уже указано в названии). Я действительно узнал, что могу сделать это с помощью оператора по модулю (%). Но первый код, который я написал, использует цикл while, поэтому я пытаюсь закончить код.

Это и есть код

 int main()
{
 char arr[1000000];
 int i = 0;
 int sum = 0;

    printf("type the number = ");
    scanf("%s", arr);

    while(arr[i] != ''){
        sum = arr[i]   sum;
        i  ;
}

printf("the total number is = %d", sum);
 

так что проблема в том, что на самом деле печатается какое-то огромное количество номеров.. Я думаю, это из-за того, что массив находится в символе, может кто-нибудь помочь мне, как я могу изменить значение на int ?

Комментарии:

1. вычитайте » 0 » из каждого символа, прежде чем добавлять его в сумму. И на самом деле вы не можете сделать это с%, если планируете поддерживать 1000000-значные числа.

2. могу ли я спросить, почему это должно быть вычитание с «0»? но спасибо, что раньше это работало !

3. Цифры представляют собой символы ASCII, а 0-это «0» или 48. Поэтому вам нужно уменьшить их до целых значений. Смотрите таблицу ASCII для получения дополнительной информации.

4. arr[i] является значением ASCII символа (например, «0» равно 48). Вы можете вычесть 48 (или «0») из каждого значения символа, используя тот факт, что числа от 0 до 9 находятся рядом друг с другом в таблице ASCII. Или вы можете добавить (arr[i]amp;0xF), так как числа расположены таким образом, что их наименьшее значение равно их десятичному значению (так, 0 равно 0x30, 7 равно 0x37 и 9 равно 0x39 и так далее — трюк используется в кодировании BCD для сжатия двух цифр в один байт).

5. каковы требования, разрешено ли вам сохранять входные данные в виде строки или вам нужно сначала преобразовать их в int или аналогичное? И вы ожидаете ввода длиной в миллион цифр? Доброта. Осторожно, даже этот буфер может быть переполнен.

Ответ №1:

  1. Вам нужно вычесть из цифрового кода код '0' .

Здесь у вас есть обе версии (я добавил некоторую логику, чтобы принимать числа с amp; - в начале).:

 
int sumdigitsStr(const char *num)
{
    int sum = 0;
    int first = 1;
    while(*num)
    {
        if(isdigit(*num)) {sum  = *num - '0'; first = 0;}
        else 
        if(first amp;amp; (*num == '-' || *num == ' '))
        {
            first = 0;
            num  ;
            continue;
        }
        else
        { 
            sum = -1; break;
        } //error string contains non digits
        num  ;
    }
    return sum;
}

int sumdigits(long long num)
{
    int sum = 0;
    do
    {
        sum  = abs((int)(num % 10));
    }while((num = num / 10));
    return sum;
}

 

Ответ №2:

 #include <stdio.h>
int main()
{
    int n;
    scanf("%d", amp;n);
    int d, sum = 0;
    while (n != 0)
    {
        d = n % 10;
        sum = sum   d;
        n = n / 10;
    }
    printf("sum of digits is : %d", sum);
    return 0;
}