1. 程式人生 > >【LeetCode】Factorial Trailing Zeroes 階乘尾部0的個數

【LeetCode】Factorial Trailing Zeroes 階乘尾部0的個數

題目

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

Note: Your solution should be in logarithmic time complexity.

題目大意

計算n階乘中尾部0的個數,時間複雜度:O(logn)

思路

迭代的方法,因為除了1以外,階乘結果都是偶數,分解質因式之後2肯定比5多,一個2*5就能增加一個0,所以只需要轉化為計算階乘分解質因式中的5的個數即可,例如
12!
= 1*2*3*4*5*6*7*8*9*10*11*12
= (2^6)(3^5)

(5^2)(7^1)(11^1)
= 479001600

其中尾部0的個數為2,正好為5的個數。

實際計算時候,為了防止棧溢位,使用迭代的方法,並使用除法代替乘法避免int溢位。

解答

Java程式碼如下:

public int trailingZeroes(int n) {
        int count = 0;
        for (int i = 5; (n / i) >= 1;) {
            count += n / i;
            n /= 5;
        }
        return count;
    }