Условие задачи : Найти сумму цифр в числе. Число вводит пользователь.
Сложность : легкая .
Подобная задача уже была разобрана (ссылка), но там мы искали сумму цифр зная , что число трехзначное. Сейчас же число вводит пользователь и нам не известно сколько в нем цифр.
Для решения задачи нам понадобятся операции div и mod. Что мы будем делать?
Сначала пустим цикл и в нем уже произойдет следующее. Допустим у нас число 732405. Мы применяем операцию mod чтобы отсеять одну цифру и сразу прибавляем её к сумме. А у числа 732405 мы убираем последнюю цифру с помощью операции div.
Число 732405
1-й проход цикла
sum := 0 + (732405 mod 10); {В sum сохраняется 5} number := (732405 div 10); {В number сохраняется 73240}
2-й проход цикла
sum := 5 + (73240 mod 10); {В sum сохраняется 5+0} number := (73240 div 10); {В number сохраняется 7324}
3-й проход цикла
sum := 5 + (7324 mod 10); {В sum сохраняется 5+0+4} number := (7324 div 10); {В number сохраняется 732}
4-й проход цикла
sum := 9 + (732 mod 10); {В sum сохраняется 5+0+4+2} number := (732 div 10); {В number сохраняется 73}
5-й проход цикла
sum := 11 + (73 mod 10); {В sum сохраняется 5+0+4+2+3} number := (73 div 10); {В number сохраняется 7}
6-й проход цикла
sum := 14 + (7 mod 10); {В sum сохраняется 5+0+4+2+3+7} number := (7 div 10); {В number сохраняется 0}
Сумма равна 21.
Цикл у нас будет while и будет он выполняться пока :
number > 0
т.е. когда у нас число станет равно нулю это будет означать что цифр в числе больше нет.
Весь код программы :
uses crt; var sum: integer; number: longint; begin clrscr; {очищаем экран} sum := 0; write('Введите число: '); readln(number); number := abs(number); // убираем знак - , если введенное число будет отрицательным while number > 0 do begin {Делим число на 10 и получаем остаток от деления т.е. крайнюю правую цифру числа} sum := sum + (number mod 10); {Делим число на 10 и получаем целую часть числа т.е. отбрасываем крайнюю правую цифру от числа} number := (number div 10); end; writeln('Сумма цифр числа = ', sum); readln; end.