Найти n! и проверить, встречаются ли в записи этого числа две рядом стоящие одинаковые цифры - Turbo Pascal
Формулировка задачи:
Найти n! и проверить, встречаются ли в записи этого числа две рядом стоящие одинаковые цифры
Решение задачи: «Найти n! и проверить, встречаются ли в записи этого числа две рядом стоящие одинаковые цифры»
textual
Листинг программы
...
for i:=1 to n do begin {цикл вычисления факториала}
* * t:=0;s1:='';
* * for j:=length(s) downto 1 do begin {длинное число представлено строкой, идем с последней цифры до первой}
* * * t:=t+(ord(s[j])-48)*i;{получаем текущую цифру функция ord - возвращает код символа из таблицы символов,
из него вычитаем chr код цифры "0"(он равен 48), в итоге имеем цифру и ее умножаем
на множитель для вычисления факториала, результат накапливаем в "уме", по сути это
умножение в "столбик"}
* * * s[j]:=chr(48+t mod 10);{последнюю цифру накопленного результата сохраняем в ответе}
* * * t:=t div 10;{уменьшаем "в уме" на одну цифру справа (ее уже записали в ответ)}
* * end;
* * * if t>0 then str(t,s1);{если в "уме" остались цифры их преобразуем в строку}
* * * s:=s1+s;{пишем перед числом}
* *end;
* *writeln('n!=',s);{собственно печатаем ответ}
t:=0;{повторов нет}
for i:=1 to length(s)-1 do if s[i]=s[i+1] then t:=1;{проходим весь цикл записи числа, и если текущая цифра равна следующей, то повтор есть}
if t=1 then writeln('ECTb noBTopbI!') else writeln('HeT noBTopoB');{собственно вывод результата}
readln;
...
Объяснение кода листинга программы
- Создается переменная
n, которую предполагается задать позже. - Создается переменная
t, которая будет использоваться для хранения текущего значения факториала. - Создается переменная
s, которая будет использоваться для хранения строки, представляющей длинное число. - Создается цикл
for, который будет выполнятьсяnраз. - Внутри цикла создается вложенный цикл
for, который будет выполняться до тех пор, пока длина строкиsбольше 1. - Внутри вложенного цикла каждая цифра строки
sумножается на соответствующий множитель для вычисления факториала и накапливается в переменнойt. - После окончания вложенного цикла последняя цифра накопленного результата сохраняется в последней позиции строки
s. - Если в переменной
tесть остаток, то все оставшиеся цифры преобразуются в строку и записываются перед числомs. - После окончания внешнего цикла проверяется, есть ли повторения в числе.
- Если есть повторения, выводится сообщение
ECTb noBTopbI!, иначе выводится сообщениеHeT noBTopoB. - Выводится
readln, чтобы прочитать ввод пользователя.