主题:[讨论]求助: n的阶乘末尾非零的数字!(1秒过的+100分)!!!
泡泡糖
[专家分:230] 发布于 2007-05-27 18:35:00
大家帮帮忙:
求助: n的阶乘末尾非零的数字!范围:(1<=n<=10的100次方).
需要算法和程序!谢谢
回复列表 (共15个回复)
11 楼
angwuy [专家分:2280] 发布于 2007-06-06 20:25:00
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 楼
worm. [专家分:180] 发布于 2007-06-07 12:00:00
将可能出现0的组合(2*5)列出;
在通过组合数求非0
13 楼
泡泡糖 [专家分:230] 发布于 2007-06-07 20:52:00
什么东西,看不懂
14 楼
Lovely哆啦 [专家分:1360] 发布于 2007-06-13 21:16:00
不,不需要高精度乘法,先用1*2取末尾8位数,不够数位就是0,用结果再乘下一个数,取末尾8位数,以此类推,也许不需要8位,可能会更少,速度会更快!
15 楼
maxumi [专家分:2200] 发布于 2007-06-19 10:51:00
从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就可以了
我来回复