Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal»
47
Тот же порядок действий применяется и для чисел четной длины, однако теперь нам не нужно
ничего отбрасывать после накопления реверсной левой части числа в переменную
right, так как в
числах четной длины нет серединной цифры. Например, дано число 1551: переворачиваем правую
половину числа 51 (получим 15) и сравниваем ее с левой половиной: 15 = 15, ответ положительный.
Эти допущения говорят о том, что необходима проверка длины числа
n на нечетность и, соот-
ветственно, отбрасывание серединной цифры в случае нечетности:
if odd(digits) then n := n div 10;
Код:
1.
program CheckPalindrome;
2.
3.
var
4.
n, a, right: longint;
5.
digits, i: byte;
6.
7.
begin
8.
readln(n);
9.
a := n;
10.
digits := 0;
11.
while a <> 0
do begin
12.
a := a div 10;
13.
inc(digits)
14.
end;
15.
right := 0;
16.
for i := 1 to digits div 2 do begin
17.
right := right * 10;
18.
right := right + n mod 10;
19.
n := n div 10
20.
end;
21.
if odd(digits) then n := n div 10;
22.
writeln(n = right)
23.
end.
Выполним «ручную прокрутку» алгоритма на числе 147741:
1)
Считаем длину числа, она равна 6 (строки 11-14);
2)
В цикле из
6 div 2 = 3 повторений прибавляем к
right (формируя реверсную запись) по-
следние три цифры числа
n, после чего отбрасываем их и имеем в
n 147, в
right 147 (строки
16-20);
3)
Так как
odd(digits) = odd(6) = false, ничего не делаем (строка 21);
4)
Выводим на экран значение выражения
n = right – ответ положительный (строка 22).
Do'stlaringiz bilan baham: