#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:
- Вам нужно вычесть из цифрового кода код
'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;
}