题解 P1009 【阶乘之和】
这里高精度乘法和加法
乘法不要每次算i!,毕竟n!=(n-1)!*n
然后放代码(我进位只进了一位,但还是过了,懒得改了)
var a,b:array[1..1000] of int64;
i,j,la,lb,n:longint;
procedure cheng(t:longint);//高精度乘单精度
var i:longint;
begin
for i:=1 to la do
a[i]:=a[i]*t;
for i:=1 to la do
begin
a[i+1]:=a[i+1]+a[i] div 10;
a[i]:=a[i] mod 10;
end;
while a[la+1]>0 do inc(la);
end;
procedure jia;//高精度加法
var i:longint;
begin
for i:=1 to la do
begin
b[i]:=b[i]+a[i];
b[i+1]:=b[i+1]+b[i] div 10;
b[i]:=b[i] mod 10;
end;
while b[lb+1]>0 do inc(lb);
end;
begin
read(n);
a[1]:=1;
for i:=1 to n do
begin
cheng(i);
jia;
end;
for i:= lb downto 1 do
write(b[i]);
end.