主题:1000!尾0问题
xxwygj
[专家分:0] 发布于 2005-08-10 13:22:00
[em18]大哥大姐,请快来帮帮我,
急急……
谢谢!
提示: 1000!=1*2*3*……*1000
问:1000!的末尾有多少个“0”?
回复列表 (共24个回复)
沙发
archenxu [专家分:10] 发布于 2005-08-10 13:40:00
cin>>n;
num=0;
while(n){
n/=5;
num+=n;
}
cout<<num<<endl;
板凳
shiyr [专家分:390] 发布于 2005-08-10 19:08:00
提示 5*2 = 10 一个零
3 楼
shiyr [专家分:390] 发布于 2005-08-10 19:10:00
算了说清楚
因式分解 在乘的过程中处理n!中2和5的数目不用把n!算出来.. 简单吧
4 楼
davidw017 [专家分:4170] 发布于 2005-08-11 15:42:00
1 楼应该是这个吧……
cin>>n;
num=0;
while(n>=5){
n/=5;
num+=n;
}
cout<<num<<endl;
5 楼
iostream [专家分:550] 发布于 2005-08-12 08:25:00
其实就是求五的因子数。
我的程序,可求n!阶乘结果末尾连续的0的个数(0<n<=1000000):
#include <iostream.h>
main()
{
long n,i;
while(cin>>n)
{
i=(n-(n%5))/5+(n-(n%25))/25+(n-(n%125))/125+(n-(n%625))/625+
(n-(n%3125))/3125+(n-(n%15625))/15625+(n-(n%78125))/78125+
(n-(n%390625))/390625;
cout<<i<<"\n";
}
}
6 楼
bbflyer [专家分:50] 发布于 2005-08-12 12:20:00
cin>>n;
num=0;
while(n>=5){
n/=5;
num+=n;
}
cout<<num<<endl;
4楼说得对,就应该这样求了,这是组合数学里面的内容
7 楼
FancyMouse [专家分:13680] 发布于 2005-08-12 17:40:00
组合数学?这是数论好吧
8 楼
天水 [专家分:320] 发布于 2005-08-16 22:46:00
各位大虾请再用pascal编一下吧,小弟这厢有礼了!
9 楼
AlexLa [专家分:60] 发布于 2005-08-24 20:44:00
var
a,b,n,i:longint;
begin
while not seekeof(Input) do
begin
readln(n);
a:=0;
for i:=1 to n do
begin
b:=i;
while (b mod 5 =0) do
begin
b:=b div 5;
a:=a+1;
end;
end;
writeln(a);
end;
end.
10 楼
AlexLa [专家分:60] 发布于 2005-08-24 20:44:00
同意2楼的说法
我来回复