算法-----一个数的阶乘结果尾部零的个数

题目:设计一个算法,计算出n阶乘中尾部零的个数

样例  11! = 39916800,因此应该返回 2

题目链接:http://www.lintcode.com/problem/trailing-zeros

算法分析:

  只有2*5才能得出一个0,所以其实就是找从1到n的所有(2,5)对。又因为2的个数多于5的个数,所以尾部有多少0取决于5的个数。看到的公式:count+=n/5^i.其中5^i小于n。完整代码如下所示:

class Solution {
    /*
     * param n: As desciption
     * return: An integer, denote the number of trailing zeros in n!
     */
    public long trailingZeros(long n) {
        // write your code here
        // long m=1;
        // for(int i=1;i<=n;i++){
        //     m=m*i;
        // }
        // long num=0;
        // while(m%10==0){
        //     num++;
        //     m/=10;
        // }
        // return num;
        long num=0;
        for(int i=1;Math.pow(5,i)<n;i++){
            num+=n/(long)Math.pow(5,i);
        }
        return num;
    }
};

  

posted @ 2016-07-10 15:00  苏羽垄  阅读(313)  评论(0)    收藏  举报