| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2273 人关注过本帖
标题:1000!后有多少个零
只看楼主 加入收藏
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
1000的阶乘远远超过了long型变量的长度,这里你可以用gmp或者类似的大数库函数进行计算。
第二: 运算1000的阶乘其实等价于计算1000阶乘中因数5的个数。
比如计算阶乘n的时候,
if n<5
结尾0的个数为0
if n>=5
n!=5(k)*5(k-1)*....10*5*x。其中x为不含有因数5的数。举个例子当n==10的时候
10!=5(2)*5(2-1)*(8*7*6*4*3*9*2)  其中的(8*7*6*4*3*9*2)就是x。
显而易见5>2,所以每当出现5则必然会有2的出现。
所以10!后面有2个0.这里我们证明出了0的个数等价于因子5的个数。
可以列出一个函数。f(y)=g(y)
f(y)等于0的个数,g(y)等价于因子5的个数
f(n!)=g(n!)等价于f(n!)=g(5^k*k!*x)=k+g(k!)
所以可以得出
f(1000!)=g(1000!)=g(5^200*200!*x)=200+f(200!)=200+f(5^40*40!)=200+40+f(40!)=240+f(5^8*8!)=248+f(5^1+1!)=249

想抽苏烟了。
2014-06-17 07:22
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
#include<iostream>
using namespace std;
int main(void)
{
   int n;
   int sum=0;
   int i;
   cout<<"plz input the number n, and I will give you how many zero in the last sequence of its factorial"<<endl;
   cin>>n;
   int t=n/5;
   while(t>0)
   {
     t=t/5;
     sum=sum+t;
   }
   sum=sum+n/5;
   cout<<sum<<endl;
   return 0;
}

想抽苏烟了。
2014-06-17 08:21
快速回复:1000!后有多少个零
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026413 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved