回 帖 发 新 帖 刷新版面

主题:[讨论]求助: n的阶乘末尾非零的数字!(1秒过的+100分)!!!

大家帮帮忙:
求助: n的阶乘末尾非零的数字!范围:(1<=n<=10的100次方).
需要算法和程序!谢谢

回复列表 (共15个回复)

11 楼

var a,b,c:extended;
begin
readln(a);
c:=1;b:=0;
while a>0 do
begin
b:=b+a div 5*c;
c:=c*5;
a:=a div 5;
end;
writeln;
end.

这是最简单的方法,如果精度不够就该用高精度

12 楼

将可能出现0的组合(2*5)列出;
在通过组合数求非0

13 楼

什么东西,看不懂

14 楼

不,不需要高精度乘法,先用1*2取末尾8位数,不够数位就是0,用结果再乘下一个数,取末尾8位数,以此类推,也许不需要8位,可能会更少,速度会更快!

15 楼

从1开始乘
1!的末尾非零数字显然是1
2!的末尾非零数字是1*2=2
3!的末尾非零数字是2*3=6
4!的末尾非零数字是6*4=24,取末位4
5!的末尾非零数字不是4*5=20,而是4*8=32,取末位2。
6!的末尾非零数字是2*6=12,取末位2
......
依此类推,每次要乘以5的时候都改乘8就可以了

我来回复

您尚未登录,请登录后再回复。点此登录或注册