1. 程式人生 > >【JS】階乘後的零 #數學 1乘到100/1000/10000 的積 末尾有幾個零?

【JS】階乘後的零 #數學 1乘到100/1000/10000 的積 末尾有幾個零?

1乘到100的積末尾有幾個零

給定一個整數 n,返回 n! 結果尾數中零的數量。

輸入: 3 , 輸出: 0 , 解釋: 3! = 6, 尾數中沒有零。
輸入: 5 , 輸出: 1 , 解釋: 5! = 120, 尾數中有 1 個零.

說明: 你演算法的時間複雜度應為 O(log n) 。


解法一:

階乘,一個正整數的階乘是所有小於及等於該數的正整數的積。示例:6! = 6 * 5 * 4 * 3 * 2 * 1 , 等於 720

公式 Z=[N/5] + [N/5^2] …

n = 300 求階乘後的0 , 300/5 + 300/25 + 300/125 = 60 + 12 + 2

總共有5的質因數 74 個

var trailingZeroes = function(n) {

    var div=5 ,sum=0
    while(div<=n){
        sum += Math.floor(n/div) 
        div*=5
    }
    return sum;    
};

解法二:

n = 1000 求階乘後的 0 ,1000/5=200 , 200/5=40, 40/5=8, 8/5=1, 3/5=0,

一共200+40+8+1+0 等於249個

var trailingZeroes = function(n) {

    var count=0;

    while(n= Math.floor(n/5)) {
        
        count+=n;
    }

    return count;
};