Сумма цифр числа
Евгений Мухутдинов
[к списку
задач]
Во входном файле записано натуральное число не превышающее 10100.
Требуется найти сумму цифр числа.
Входные данные
В единственной строке входного файла INPUT.TXT записано одно
число.
Выходные данные
В файл OUTPUT.TXT выведите сумму цифр числа.
Пример
INPUT.TXT |
OUTPUT.TXT |
4545
1111111111
|
18
10 |
Решение
Как говориться, все бы ничего, да вот уж на входе слишком
большое число. Типов переменных, в которые можно было бы
уместить такое большое число, не существует. Сразу начинают
лезть мысли о длинной арифметике, соответственно о том, что
можно все считать в массив, а потом уж подсчитать сумму его
элементов.
На самом деле, можно прекрасно обойтись и без массива. Можно
просто считывать каждый отдельны символ входного файла в
переменную типа char (в
string можно было бы считать только
всю строку целиком). Далее, используя функцию
ORD возвращаем порядковый тип символа согласно таблице
ASCII и вычитаем 48.
Что же касается результата, то максимальное значение
может быть 101 * 9 = 909 - помещается в переменную типа
integer.
Вот что получилось у меня (компилятор
Pascal ABC):
var
x: char;
res: integer;
input, output: text;
begin
res:=0;
Assign(input,'input.txt');
Reset(input);
Assign(output,'output.txt');
Rewrite(output);
while not EOF (input) do
begin
Read(input,x);
res:= res + (ord(x)-48);
end;
Write(output,res);
Close(input);
Close(output);
end.
Возможные ошибки в входном файле
input.txt
В заключение хочу привести одни пример. Посмотрите на
скриншоты содержимого файлов
input.txt и
output.txt.
Обратите внимание, что на входе у нас якобы 55,
соответственно на выходе должно быть 10, а реально -63. Что
произошло?
Я немного схитрю и добавлю в цикл строчку
Writeln (ord(x)- 48)
- для того, чтобы посмотреть, символы с какими
порядковыми номерами считываются из файла. Запускаем программу и
видим следующее:
Оказывается, в входном файле, кроме наших пятерок (код 53),
присутствуют символы с порядковыми номерами 13 и 10. Дело в том,
что при подготовке входного файла input.txt,
после ввода двух цифр пять, была нажата клавиша
"Enter" и это привело к генерации
двух управляющих символов - возврата каретки (код 13) и перевода
строки (код 10). Соответственно результат стал равен 53 - 48 +
53 - 48 + 13 - 48 + 10 - 48 = - 63.
[к списку
задач]
|