Найти 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
, чтобы прочитать ввод пользователя.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д