Program SummaFakt;
const maxn=2 540 159;
type interval=0..9; {цифры}
var fcif:array [interval] of integer;
{факториал цифр искомых чисел}
 k: interval;
 n, {пробное число}
 s, {сумма факториалов цифр}
 nn:integer; {десятки}
 function sumf (n:integer):integer;
{сумма факториалов цифр числа n}
 var summa:integer;
 begin
 summa:=0;
 repeat
 summa:=summa+fcif[n mod 10];
 n:=n div 10
 until n=0;
 sumf:=summa
 end;
begin
 fcif[0]:=1; {запоминаются факториалы цифр}
 for k:=1 to 9 do
 fcif[k]:=fcif[k-1]*k;
 for nn:=0 to maxn div 10 do {цикл для десяти чисел}
 begin
 n:=nn*10;
 s:=sumf(n);
 repeat
 if s=n then writeln(n);
 n:=n+1;
{корректируется сумма факториалов цифр}
 s:=s-fcif[(n-1) mod 10]+fcif[n mod 10]
 until (s>n) or {в десятке не удается найти искомых чисел}
 (n mod 10=0) {закончился десяток}
 end
end.
Выполнив эту программу, ЭВМ напечатала результаты:
1
2
145
40 585


2012-06-25 • Просмотров [ 1809 ]