leetcode 172 階乘後的零

2021-10-03 05:04:05 字數 836 閱讀 8833

對於乙個數的階乘,就如之前分析的,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) * ... * n

每隔 25 個數字,出現的是兩個 5,所以除了每隔 5 個數算作乙個 5,每隔 25 個數,還需要多算乙個 5。

也就是我們需要再加上 n / 25 個 5。

同理我們還會發現每隔 5 * 5 * 5 = 125 個數字,會出現 3 個 5,所以我們還需要再加上 n / 125 。

綜上,規律就是每隔 5 個數,出現乙個 5,每隔 25 個數,出現 2 個 5,每隔 125 個數,出現 3 個 5... 以此類推。

最終 5 的個數就是 n / 5 + n / 25 + n / 125 ...

寫程式的話,如果直接按照上邊的式子計算,分母可能會造成溢位。所以算 n / 25 的時候,我們先把 n 更新,n = n / 5,然後再計算 n / 5 即可。後邊的同理。

*/class solution

return ans;}};

階乘後的零 LeetCode 172

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

LeetCode 172 階乘後的0

乙個數n,他的階乘n 的尾數裡面有多少0.0的出現就是2和5組成的。也就是看1 n這n個數字中,各有多少個2和5的配對。考慮到2的數字肯定比5多,所以只用考慮有多少個5即可。比如31這個數字,31沒有5的組合,但是30有,25有,20有 5有。class solution def trailingz...

leetcode 172 階乘後的零

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