Формулировка. Дано натуральное число n заранее неизвестной разрядности. Сформировать и вывести на экран число, представляющее собой реверсную запись n.
Решение. Это более общий случай задачи 5, в которой при случае трехзначного n отчетливо видны повторяющиеся фрагменты кода. Попытаемся получить общий алгоритм решения через цикл.
Пусть дано число 25893. Возьмем его последнюю цифру как остаток от деления на 10 – это 3. Очевидно, она должна быть первой. Отбросим ее у числа n и возьмем последнюю цифру 9 – она должна быть второй. Чтобы сформировать две цифры реверсного числа, умножим 3 на 10 и прибавим 9, потом добавим третью цифру и т. д.
Так как разрядность числа неизвестна, мы будем использовать цикл с предусловием. Его тело будет выглядеть так:
r := r * 10;
r := r + n mod 10;
n := n div 10;
Поначалу результат r должен быть равен 0, и тогда умножение нуля на 10 в первом шаге не разрушает формирование реверсной записи, которое теперь может быть заключено в один цикл.
Каким же будет условие продолжения? Нетрудно понять, что когда мы будем добавлять последнюю оставшуюся цифру исходного числа n к реверсной записи r, мы умножим r на 10, прибавим к ней как n mod 10 (в данном случае этот остаток равен n) и разделим n на 10. Тогда n станет равно 0 и цикл должен закончиться, так что условие его продолжения – n < > 0.
Код:
- program ReverseOfN;
- var
- r, n: word;
- begin
- readln(n);
- r := 0;
- while n <> 0 do begin
- r := r * 10;
- r := r + n mod 10;
- n := n div 10
- end;
- writeln(r)
- end.