階乘後的零(力扣第172題)

2021-10-06 18:50:08 字數 988 閱讀 8294

題目

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

分析:

求尾數為0的個數,那就要分析如何才能使得尾數會有0,其實就是在求階乘運算的過程中存在10這個因子,繼續分解,實質就是存在2和5這兩個因子,有多少個2*5,則結尾就會有多少個0,而2*5個的個數,其實受限於5的個數,因為2是乙個較小的值,且是更多數的因子,因此對於0-n這些數中,能夠分解出的5的個數一定是小於分解出的2的個數的。所以能夠分解出多少個5,那麼尾數就會有多少個0。

那麼如何求出能夠分解出的5的個數呢,我們來找一下規律,假如:

n = 5時,5!= 1*2*3*4*5,能夠分解出的5這個因子的個數是1個;

n = 6時,6!= 1*2*3*4*5*6 ,能夠分解出的5這個因子的個數是1個;

n = 10時,10! = 1*2*3*4*5*6*7*8*9*10,能夠分解出的5這個因子的個數是2個;

n = 30時,30!= 1*2*……*25*26*27*28*29*30,能夠分解出的5這個因子的個數是7個;

從以上的規律可以看出,能夠分解出5這個因子的數都是5的倍數,所以n/5可以求出不大於n的情況下,5的倍數的個數,那麼有多少個5的倍數就會提取出多少個因子5,但是,這還沒有結束,看上邊最後乙個例子,30的階乘,為啥分解出因子5的個數是7個而不是6個,原因在於25這個數的存在,它能夠分解出兩個因子5,所以n的階乘能夠一共分解出7個因子5。

所以不大於n時,n/25可以求出25倍數的個數,那就可以再提取相應個數的因子5出來;然後繼續判斷n/5^3   ……

最終5的個數是:n/5 + n/5^2 + n/5^3+……

**實現:

public int trailingzeroes(int n) 

int res = 0;

while (n != 0)

return res;

}

力扣中國172階乘後的零

class solution 超時 首先是用的暴力的方法算的,直接算出階乘,然後求出有幾個零 但是提交的時候直接顯示超時。def trailingzeroes self,n int int sum 0,sum num 0,1 for index in range 1,n 1 sum num inde...

172 階乘後的零(簡單題)

題目描述 給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.解法 class solution return b 本題思路概述 階乘尾數為0,要得到0的尾數,就需要偶數與5相乘...

172 階乘後的零

具體對於5 5 4 3 2 1 120,結果有乙個0,原因是存在一對2 5 10,對於10來說,只有2 5可以構成,所以需要在階乘中查詢有多少對2 5。在看乙個例子 11 11 10 9 8 7 6 5 4 3 2 1 11 2 5 9 4 2 7 3 2 1 5 2 2 3 1 2 1 對於含有2...