#c #stdio #getchar
#c #stdio #getchar
Вопрос:
У меня есть задание создать программу, которая вычисляет итеративную цифровую сумму целого числа, например. выполнение цифровой суммы до тех пор, пока результатом не станет одна цифра. Загвоздка в том, что число, на которое они проверяют, намного больше, чем может быть сохранено в любом типе int (около 10 ^ 40000), поэтому моей идеей было выполнить первую сумму с помощью getchar(), суммируя число цифра за цифрой. Мой код
#include <stdio.h>
int main(){
long int n=0;
int c;
//first sum
while((c=getchar())!=EOF amp;amp; c!='n'){
n =(c-'0');
}
//iterative summing
long int s;
do{
s=0;
while(n>0){
s =n%10;
n/=10;
}
n=s;
}while (n>=10);
printf("%ldn",s);
return 0;
}
Это работало для относительно коротких чисел, однако после некоторого момента сумма получалась неправильной. Итак, я попытался настроить переменную, которая увеличивалась бы при суммировании каждого символа, и она всегда показывала бы число 4095.
Итак, мой вопрос в том, существует ли 11-разрядное ограничение на количество символов, которые вы можете получить из стандартного интерфейса с помощью getchar ()? Если да, есть ли способ получить больше?
Комментарии:
1. К самому вопросу — нет, ограничений нет. Но как вы вводите входные данные?
2. Я просто скопировал числа и вставил их в терминал.
3. Так что это ошибка вашего терминала. Лучше перенаправить из файла.
4. Вероятно, это ошибка режима cooked / canonical драйвера tty ядра, который должен устанавливать ограничение на длину строки, чтобы избежать необходимости неограниченного буферного пространства в ядре. Если бы tty находился в режиме без предварительной обработки, терминал, вероятно, не помешал бы вам вставить в него произвольное количество символов. Но да, OP должен использовать перенаправление здесь.
5. Бьюсь об заклад, что ваша копипаста остановилась на 4095 символах.