为了解决这个问题,必须首先从数学上分析在N!结果值的末尾产生零的条件。不难看出:一个整数若含有一个因子5,则必然会在求N!时产生一个零。因此问题转化为求1到N这N个整数中包含了多少个因子5。若整数N能被25整除,则N包含2个因子5;若整数N能被5整除,则N包含1
个因子5。
*程序说明与注释
#include
using
namespace
std;
int
main()
{
long
a,count
=0;
for(a=5;a<=N;a+=5)
//循环从5开始,以5的倍数为步长,考察整数
{
++count;
//若为5的倍数,计数器加1
if(!(a%25))
++count;
//若为25的倍数,计数器再加1
}
cout<<"The
number
of
0
in
the
end
of
N!
is:"<
return
0;
}
#include
using
namespace
std;
int
main()
{
int
n,c=0;
cout<<"please
input
n"<
cin>>n;
while(n!=0)
{
n/=5;
c+=n;
}
cout<<"the
number
of
zero
is
"<
return
0;
}
统计1-n中所有数含有因子5的个数之和,因为只有2和5相乘才会得到一个0,而因子2出现的次数远比5多,所以5的个数决定了0的个数
ps:楼上好像不对,如果125呢,有3个5,625呢。。。你好像都没考虑
tian20090730
的思路很正确,完全同意!但他的代码似乎有些问题。
看看我的代码吧,这个应该是正解了。采纳吧,嘿嘿。
#include
using
namespace
std;
int
main()
{
int
n;
cin
>>
n;
int
factor5_count
=
0;
//
查找第一个能被5整除的数字,也就是含有5因子的数字。
while
(n
%
5
!=
0)
{
n
--;
}
while
(n
>
0)
{
//
对每一个含有5因子的数字,进一步计算含有几个5因子
int
tmp
=
n;
while
(tmp
%
5
==
0)
{
factor5_count
++;
tmp
/=
5;
}
//
跳到下一个5的倍数处理
n
-=
5;
}
cout
<<
factor5_count
<<
endl;
return
0;
}