設計一個算法,計算出n階乘中尾部零的個數
樣例
11! = 39916800,因此應該返回 2
挑戰
O(logN)的時間複雜度
solutioin: 轉自Factorials and Trailing Zeroes
1.計算
如果10是一個數的因子的話那麼其尾部肯定會有0。例如10是50,120和1234567890的因子,所以我們需要去計算出10的因子有多少在
對於1到23中有多少個數字能被5整除? 5,10,15和20。因此
code:
class Solution {
public:
// param n : description of n
// return: description of return
long long trailingZeros(long long n) {
long long res = 0;
do {
res += n/5;
} while(n /= 5);
return res;
}
};
計算
在1到101中有多少個數是5的倍數。
一種更加簡潔的求法,因爲
總結:
1. 獲取計算階乘的這個數, 比如(
2. 將這個數除以
3. 除以
4. 除以
5. 繼續除以5的更高次冪,直到結果小於1。
6. 將以上所有的除法結果相加,就是尾零數的個數
code
class Solution {
public:
// param n : description of n
// return: description of return
long long trailingZeros(long long n) {
long long count = 0;
for (long long i = 5; n / i; i *= 5)
count += n/i;
return count;
}
};