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;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#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;
}
//---------------------------------------------------------------------------
展开全部
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;
}
看看我的代码吧,这个应该是正解了。采纳吧,嘿嘿。
#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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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呢。。。你好像都没考虑
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呢。。。你好像都没考虑
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为了解决这个问题,必须首先从数学上分析在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;
}
*程序说明与注释
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询