1. 程式人生 > 實用技巧 >階乘後的零

階乘後的零

題目:172. 階乘後的零

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

示例

示例 1:

輸入: 3
輸出: 0
解釋: 3! = 6, 尾數中沒有零。

示例 2:

輸入: 5
輸出: 1
解釋: 5! = 120, 尾數中有 1 個零.
說明: 你演算法的時間複雜度應為 O(log n) 。

解題思路

1. 求尾數0的個數,即10,10只能由2*5組成,所以求因子中 2 和 5的個數即可
2. 但是明顯因子中2的數量>5的數量,所以只需要求5中因子的個數即可

例如:25!= 1*2*3*4*(1*5)*........*(2*5).......*(3*5)........*(4*5).....*(5*5)

可知
每隔5位就有1個5
每隔25位會有2個5
每隔125位會有3個5
.......以此類推

結論:n!中因子5的個數 = n/5 + n/25 + n/125 .......
tip:但是,分母可能會出現越界的情況!
改善:例如計算n/25的時候 每次都把n/5之後更新回n,這樣n/25更新完n後就變為了n/5 其他的依次類推

程式碼

public int trailingZeroes(int n) {
    //因子中5的個數
    int count = 0;

    //count = n/5 + n/25 + n/125 .......
    while (n > 0) {
        //5的個數
        count += n / 5;
        //更新n
        n = n / 5;
    }
    return count;
}