Замена цифры в числе - Pascal ABC
Формулировка задачи:
Дано целое число (5<число<2*109), его делят нацело на 2. Полученное частное опять нацело делят на 2, но если в записи частного попадается цифра 6 (одна или несколько), её заменяют цифрой 5. Частное продолжают делить нацело на 2 (при необходимости делая замены цифр) до тех пор, пока число не станет меньше 5.
Найти количество замен цифр.
Решение задачи: «Замена цифры в числе»
textual
Листинг программы
var a:longint;k:integer;
function zam(x:longint;var kz:integer):longint;
begin
if x>0 then
if x mod 10 = 6 then begin inc(kz); zam:=10*zam(x div 10,kz)+5 end
else zam:=10*zam(x div 10,kz)+(x mod 10)
else zam:=0
end;
begin
write('a = ');readln(a);k:=0;
while a>=5 do a:=zam(a div 2,k);
writeln('количество замен: ',k)
end.
Объяснение кода листинга программы
- Создаются две переменные типа longint: a и k.
- Создается функция zam, которая принимает в качестве аргументов x (тип longint) и kz (тип integer).
- Внутри функции проверяется, что x больше нуля.
- Если x больше нуля, то выполняется проверка, что x mod 10 равно 6. Если это условие выполняется, то значение kz увеличивается на единицу и функция вызывается рекурсивно с аргументами x div 10 и kz. В результате выполняется замена цифры в числе.
- Если условие из пункта 4 не выполняется, то значение kz остается неизменным, а результат функции zam присваивается переменной a.
- В основной части программы считывается значение переменной a и устанавливается начальное значение k равным 0.
- Запускается цикл while, который выполняется до тех пор, пока a больше или равно 5.
- Внутри цикла значение a присваивается результату вызова функции zam, деленному на 2, и значению k увеличивается на единицу.
- По завершении цикла выводится количество замен, которое равно значению k.