Description
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=5*4*3*2*1。
Input
N
Output
S
Sample Input
5
Sample Output
153
解题思路:只是高精度,不解释。
程序:
const
maxn=65;
var
a,c:array[1..maxn] of longint;
procedure mul(k:longint);
var
i,s,g:longint;
begin
g:=0;
for i:=maxn downto 1 do
begin
s:=a[i]*k+g;
a[i]:=s mod 10;
g:=s div 10;
end;
end;
procedure add;
var
i,s,g:longint;
begin
g:=0;
for i:=maxn downto 1 do
begin
s:=a[i]+c[i]+g;
c[i]:=s mod 10;
g:=s div 10;
end;
end;
procedure fac(n:longint);
var
i:longint;
begin
fillchar(a,sizeof(a),0);
a[maxn]:=1;
for i:=2 to n do
mul(i);
end;
procedure main;
var
i,n:longint;
begin
readln(n);
fillchar(c,sizeof(c),0);
for i:=1 to n do
begin
fac(i);
add;
end;
end;
procedure print;
var
i,j:longint;
begin
i:=1;
while (c[i]=0) and (i
for j:=i to maxn do
write(c[j]);
end;
begin
main;
print;
end.
版权属于:Chris
原文地址:http://blog.sina.com.cn/s/blog_83ac6af80102v0i9.html
转载时必须以链接形式注明原始出处及本声明。