2. 尾部的零 (JavaScript)

 

题目

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

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

挑战
O(logN)的时间复杂度

 

思路

 如果直接累乘查找最后的0是不可取的,不满足时间复杂度。

如果要满足尾部的零,拆开公式肯定是 * 10。

10的话分为 2 * 5,然后把阶乘拆成最小公因式,我们只要计算公式里面有多少个5就可以了

 

代码

/**
 * @param n: A long integer
 * @return: An integer, denote the number of trailing zeros in n!
 */
const trailingZeros = function (n) {
    //计算有多少个5
    var count = 0;
    //如果temp>0继续分解,否则直接return
    var temp = parseInt(n/5);
    while (temp != 0) {
        count += temp;
        temp = parseInt(temp / 5);
    }
    return count;
}

  

posted @ 2018-08-07 22:12  chobyn  阅读(121)  评论(0)    收藏  举报