
1. Любое натуральное число можно представить как сумму факториалов. Значит задача не так сложна. Для решения, я бы составил массив факториалов (благо всего 12 значений), либо просто написал функцию fac(n), которая возвращает факториал числа. Потом просто двойной цикл (примерно так)
Код
for i:=12 downto 1 do
while (sum + fac(i))<=N do
begin
sum:=sum + fac(i);
writeln(i);
end;
while (sum + fac(i))<=N do
begin
sum:=sum + fac(i);
writeln(i);
end;
2. Еще проще.
Код
for i:=1 to 1000 do
if summ(i) = N then
count:=count + 1;
if summ(i) = N then
count:=count + 1;
Где функция summ возвращает сумму цифр числа
Можно написать например так
Код
function summ(n:integer):integer;
var
tn, t, sm:integer;
begin
tn := n;
t := 0;
while tn>0 do
begin
t := t + tn mod 10;
tn := tn div 10;
end;
summ:=t;
end;
var
tn, t, sm:integer;
begin
tn := n;
t := 0;
while tn>0 do
begin
t := t + tn mod 10;
tn := tn div 10;
end;
summ:=t;
end;