如何用C++编程阶乘尾数零的个数,N!末尾有多少个零

要C++的方法
谢谢大家啦,帮帮忙!!!

乘积末尾的0的个数依赖于因子中的2的个数和5的个数。对于阶乘来说,每2个数字就至少有一个2的因子,所以2的因子是足够的。5的因子相对少些,至少连续5个数才能保证一定出现一个。注意,这里连续5个书保证出现一个5的因子是指最少的情况。比如1,2,3,4,5,这就只会出现一个。但是考虑 21,22,23,24,25,25 = 5 * 5,所以如果乘以25那就能得到2个5的因子。

//---------------------------------------------------------------------------

#include <iostream>
using namespace std;
int main(void)
{
int tmp = 5;
int zeroCnt = 0,n;
cin>>n;
while(n >= tmp)
{
zeroCnt += n/tmp;
tmp *= 5;
}
cout<< zeroCnt<<endl;
return 0;
}

//---------------------------------------------------------------------------
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-22
tian20090730 的思路很正确,完全同意!但他的代码似乎有些问题。
看看我的代码吧,这个应该是正解了。采纳吧,嘿嘿。

#include <iostream>
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;
}本回答被提问者采纳
第2个回答  2010-07-22
#include <iostream>
using namespace std;
int main()
{
int n,c=0;
cout<<"please input n"<<endl;
cin>>n;
while(n!=0)
{
n/=5;
c+=n;
}
cout<<"the number of zero is "<<c<<endl;
return 0;
}
统计1-n中所有数含有因子5的个数之和,因为只有2和5相乘才会得到一个0,而因子2出现的次数远比5多,所以5的个数决定了0的个数
ps:楼上好像不对,如果125呢,有3个5,625呢。。。你好像都没考虑本回答被网友采纳
第3个回答  2010-07-22
为了解决这个问题,必须首先从数学上分析在N!结果值的末尾产生零的条件。不难看出:一个整数若含有一个因子5,则必然会在求N!时产生一个零。因此问题转化为求1到N这N个整数中包含了多少个因子5。若整数N能被25整除,则N包含2个因子5;若整数N能被5整除,则N包含1 个因子5。

*程序说明与注释

#include<iostream>
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:"<<count<<endl;//打印结果

return 0;

}
第4个回答  2018-04-21
#include <iostream>
using namespace std;
int fact(int n) //定义求n阶乘的函数。
{
if(n==1) return 1;
else return n*fact(n-1);
}
int main()
{
int n,m,x=0;
cout << "请输入一个数字n: " << endl;
cin>>n;
m=fact(n); //计算n的阶乘赋值给m
while(m%10==0) //计算m后有几个0
{
x++;
m/=10;
}
cout<<"末尾0的个数为:"<<x<<endl;
return 0;
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网