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

要C++的方法谢谢大家啦,帮帮忙!!!... 要C++的方法
谢谢大家啦,帮帮忙!!!
展开
 我来答
匿名用户
2010-07-22
展开全部
乘积末尾的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;
}

//---------------------------------------------------------------------------
孟羽然
2010-07-22 · TA获得超过2976个赞
知道小有建树答主
回答量:1308
采纳率:70%
帮助的人:564万
展开全部
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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qyjubriskxp
2010-07-22 · TA获得超过892个赞
知道小有建树答主
回答量:735
采纳率:0%
帮助的人:738万
展开全部
#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呢。。。你好像都没考虑
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tian20090730
2010-07-22 · TA获得超过360个赞
知道答主
回答量:82
采纳率:0%
帮助的人:62.3万
展开全部
为了解决这个问题,必须首先从数学上分析在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;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
WO只是潇洒
2018-04-21
知道答主
回答量:2
采纳率:0%
帮助的人:1715
展开全部
#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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式