Factorial Trailing Zeroes - Javacript

Given an integer n, return the number of trailing zeroes in n!.

Note: Your solution should be in logarithmic time complexity.

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

Tags

Math

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

這道題考察的其實是數學知識,來看一下規律。

乘積產生0 也就意味着這個數字分解之後,得到Math.min(2的個數,5的個數)

5 = 5x4x3x2x1 1個5 1個2 => 1個0

6 = 6x5x4x3x2x1 1個5 1個2 => 1個0

10 = 10x9x8x7x6x5x4x3x2x1 2個5 8個2 => 2個0

...

可以看出2始終比5要多,0的個數根據分解出的因子5的個數來定的,因此我們可以算出1~n中,包含5的個數

另外需要注意的是25,125... 本身包含多個5,也是需要囊括進去的。例如28,1~28中,包含5 10 15 20 25,

需要注意的是,25包含兩個5, 也因此 28 有 Math.floor(28/5) + 1 = 6個5。

n!後綴0的個數 = n!質因子中5的個數 = floor(n/5) + floor(n/25) + floor(n/125) + ....

/**
 * @param {number} n
 * @return {number}
 */
var trailingZeroes = function (n) {
    var divider = 5;
    var ret = 0;

    while (n >= divider) {
        ret += Math.floor(n / divider);
        divider = divider * 5;
    }

    return ret;
};






發佈了82 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章