Hosted by uCoz

Задача № 31. Сформировать реверсную запись заданного числа

Формулировка. Дано натуральное число 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.

Код:

  1. program ReverseOfN;
  2. var
  3. r, n: word;
  4. begin
  5. readln(n);
  6. r := 0;
  7. while n <> 0 do begin
  8. r := r * 10;
  9. r := r + n mod 10;
  10. n := n div 10
  11. end;
  12. writeln(r)
  13. end.