給定乙個整數 n,返回 n! 結果尾數中零的數量。
示例:
輸入: 3
輸出: 0
解釋: 3! = 6, 尾數中沒有零。
輸入: 5
輸出: 1
解釋: 5! = 120, 尾數中有 1 個零.
說明:
直接求階乘然後數 0 不可行,因為可能溢位,而且計算也比較慢。
首先分析一下:n! = 1*2*3*...*n
,如果階乘中的因子能夠被分解為 2 和 5 相乘的形式,則將其分解,所以n! = 1*2*3*...*7*(2*4)*9*(2*5)*...*n
,只有2*5
能產生乙個零。所以我們統計 n! 中有多少個 2 和多少個 5 參與相乘就行了。因為 2 的個數大於 5,所以我們只需要看 5 的個數有多少就行了。
假設 n = 100,首先每 5 個數字都能分解出來 1 個 5,這些數字是 5、10、15、20、...、95、100,共 n/5 = 100/5 = 24 個;
有些數字不止能分解為 1 個 5,例如 25,所以對於 5、10、15、20、...、95、100,我們將 5 提出來,得到 5(1、2、3、4、...、20),則 (1、2、3、4、...、20)共 20 個數,又可以提取出 20/5 = 4 個 5,分別是 25、50、75、100,這相當於 100/5/5 = 100/(5^2);
以此類推,直到無法提取 5 為止。
演算法如下:
**如下:
class solution
return ans;
}};
1、 LeetCode 階乘後的零
一.題目描述 給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.說明 你演算法的時間複雜度應為 o log n 二.解法 老實說,這道題,博主並沒有做出來,是抄的部落格大神的答...
LeetCode 階乘後的零
給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.說明 你演算法的時間複雜度應為 o log n 思路分析 不難發現,只用出現2的倍數 5的倍數相乘才會在末尾出現零。並且2的倍...
leetcode 階乘後的零
給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.說明 你演算法的時間複雜度應為 o log n 本題如果暴力乘計數的話必然會爆範圍,因為數字增長的速度太快了 其實乘法裡面,末...