题目:

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

样例:

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

思路:

这是一个数学问题,十进制尾数得到0的只有$2*5$,将阶乘的每个因素分解质因数,明显得到2的数量多于5的数量,所以,这个问题就变成了有多少个5的问题。
可以是5,25,125...为什么这样?比如$26!$:25其实可以分解成2个5相乘,而$26/5$只计算了一个5,因此还要再加$26/25$$.

参考思路:

class Solution {
public:
    /*
     * @param n: A long integer
     * @return: An integer, denote the number of trailing zeros in n!
     */
    long long trailingZeros(long long n) {
        // write your code here, try to do it without arithmetic operators.
        /*这是一个数学问题,十进制尾数得到0的只有2*5,将阶乘的每个因素分解质因数,明显得到2的数量多于5的数量,所以,这个问题就变成了有多少个5的问题。可以是5,25,125...为什么这样?比如26!:25其实可以分解成2个5相乘,而26/5只计算了一个5,因此还要再加26/25.*/
        long long sum = 0;
        long long t=5;
        while(t<=n){
            sum += n/t;
            t = 5*t;
        }
        return sum;
        
        
    }
};

wydong
40 声望5 粉丝

wyd


« 上一篇
数字整除数
下一篇 »
各位相加