[问题2]:整数n的阶乘写作n !,它是从l到n的所有整数的乘积。阶乘增长的速度很快:13!在大多数计算机上不能用32位的整数来存放。70!已经超出多数浮点类型的范围。你的任务是找出n!最右边的非零位。例如,5!=1*2*3*4*5=120,所以5!的最右非零位为2,同样,7!=1* 2*3*4*5*6* 7=5040,所以7!的最右非零位为4。
输入:一个在1~1000的整数n。
输出:n !的最右非零位。
程序如下:
const max=250;
var a:array[1..max+1]of word;
n:word;
procedure init;
begin
write(‘enter n:’);
readln(n);
fillchar(a,sizeof(a),0);
a[1]:=1;
end;
procedure calc;
var i,j;word;
begin
for i:=2 to n do 或for i:=1 to n do
begin
for j:=1 to max do
a[j]:=a[j]*i;
for j:=1 to max do
begin
inc(a[j+1],a[j]div 10);
a[j]:=a[j]mod 10;
end;
end;
end;
procedure print;
var i:word;
begin
i:=j;
while a[i]=0 do
inc(i);
writeln(a[i]);
end;
begin
init;
calc;
print;
end.