【LeetCode】Factorial Trailing Zeroes 階乘尾部0的個數
阿新 • • 發佈:2019-01-09
題目
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)
= 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;
}