LeetCode 172 階乘後的0

2021-10-01 03:45:26 字數 1252 閱讀 1484

乙個數n,他的階乘n! 的尾數裡面有多少0.

0的出現就是2和5組成的。也就是看1-n這n個數字中,各有多少個2和5的配對。考慮到2的數字肯定比5多,所以只用考慮有多少個5即可。

比如31這個數字,31沒有5的組合,但是30有,25有,20有…5有。

class

solution

:def

trailingzeroes

(self, n:

int)

->

int:

if n <=5:

return n //

5else

:return n //

5+ self.trailingzeroes(n//

5)

class

solution

:def

trailingzeroes

(self, n:

int)

->

int:

res =

0while n >=5:

res += n //

5 n //=

5return res

首先題目的意思是末尾有幾個0

比如6! = 【1* 2* 3* 4* 5* 6】

其中只有2x5末尾才有0,所以就可以拋去其他資料 專門看2, 5 以及其倍數 畢竟 4 x 25末尾也是0

比如10!,其中 4能拆成2 * 2 , 10能拆成 2 * 5

所以10! = 【2*(22)5(23)(222)(25)】

乙個2和乙個5配對 就產生乙個0 所以10!末尾2個0

轉頭一想 2肯定比5多 所以隻數5的個數就行了

假若n=31 31裡能湊10的5為[5, 25, 35, 45, 25, 6*5] 其中 25還能拆為 52

所以 裡面的5的個數為 int(31/(51)) + int(31/(5**2))

可以觀察得到,31 // 5 = 6, 說明有6個數字可以提供乙個5,這6個數字是5, 10, 15,20,25,30.

但有些數字可以提供兩個5,這個數字在31為例子的情況下,只有25。可以通過31 // 5

25^2

52= 1 得到。

int

trailingzeros

(int n)

return res

}

階乘後的零 LeetCode 172

10進製數結尾的每乙個0都表示有乙個因數10存在,任何進製都一樣,對於乙個m進製的數,讓結尾多乙個0就等價於乘以m。10可以分解為2 5 因此只有質數2和5相乘能產生0,別的任何兩個質數相乘都不能產生0,而且2,5相乘只產生乙個0。所以,分解後的整個因數式中有多少對 2,5 結果中就有多少個0,而分...

leetcode 172 階乘後的零

給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.說明 你演算法的時間複雜度應為 o log n 此篇文章並不是講這個題,而是總結一下學習到的乙個知識點 對於乙個正整數n,求所...

leetcode 172 階乘後的零

對於乙個數的階乘,就如之前分析的,5 的因子一定是每隔 5 個數出現一次,也就是下邊的樣子。n 1 2 3 4 1 5 2 5 3 5 n 因為每隔 5 個數出現乙個 5,所以計算出現了多少個 5,我們只需要用 n 5 就可以算出來。但還沒有結束,繼續分析。1 5 1 5 5 2 5 5 3 5 5...