階乘後的零
阿新 • • 發佈:2020-07-30
題目: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; }