码迷,mamicode.com
首页 > 其他好文 > 详细

编程之美—阶乘计算

时间:2015-04-24 16:26:48      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:编程之美   阶乘计算   

题目:

1.给定一个整数N,那么N的阶乘N!末尾有多少个0?如N=10,N!=3628800,N!的末尾有两个0;

2.求N!的二进制表示中最低位1的位置。


问题1解法一:

基本思想:

N!=K*10^M,那么N!末尾有M个0.

N!=2^X*3^Y*5^Z,M=min(X,Z)。因为X>=Z,所以M=Z。

计算i(i=1,2,---,N)的因为分解中5的指数,求和。

ret=0;
for(i=1;i<=N;i++)
{
    j=i;
    while(j%5==0)
    {
         ret++;
         j/=5;
     }
}


问题1解法二:

基本思想:

Z=[N/5]+[N/5^2]+[N/5^3]+......

ret=0;
while(N)
{
     ret+=N/5;
     N/=5;
}


问题2的解法:

N!中含有质因数2的个数,=[N/2]+[N/4]+[N/8]+.....

int lowestOne(int n)
{
    int ret=0; 
    whiel(N)
    {
        N>>=1;
        ret+=N;
     }
     return ret;
}


编程之美—阶乘计算

标签:编程之美   阶乘计算   

原文地址:http://blog.csdn.net/wtyvhreal/article/details/45246639

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!