Например:
INPUT - 145->
Output:5!+4!+1!=145
var i,n,s,j,m:integer;
function F(n:integer):integer;
var i,p:integer;
begin
p:=1;
for i:=1 to n do begin
p:=p*i; end;
F:=p;
end; {Factorial}
begin clrscr;
readln(n);
while m<=n do begin
inc(i);
m:=F(i); j:=i; end; {самый близкий факториал}
while j>0 do begin
j:=j-1;
s:=s+F(j);
if s>n then begin s:=s-F(j); j:=j-1;
end;
end;
if s=n then writeln('YES') else writeln('NO'); readln
end.
Ну вроде бы разобрался как выяснить если можно представить как суму из факториалов, но как вывести на экран?
Вот вариант:
║
while m<=n do beginВ принципе должен работать, только вот почему то тут (l:=s; ) x получает значение сумы s:=s+F(j). например если n=145, то тут x сразу получает 120 ( 5!)
║ inc(i);
║ m:=F(i); j:=i; end; {factorial apropiat}
║ while j>1 do begin
║ j:=j-1;
║ s:=s+F(j); l:=s;
║ if s>n then begin x:=x+1; s:=s-F(j); end;
║ if l=s then a[x]:=l;
║ end;
║ if s=n then begin
║ for i:=1 to x do begin
║ write(a[x],'!'); if i<x then write('+'); end;
║ write('=',n); end else writeln('Nu poate');
║
║ readln;
║ end.
║
║