题解 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.