n的階乘末尾含0的個數

2021-07-12 05:10:22 字數 1132 閱讀 2435

本博主曾被問過這樣乙個問題:求n的階乘中末尾含有多少個0。例如n=10,n!=3628800,那麼n!末尾有兩個0。

直接計算n!的值顯然不合適,因為n!數值太大,很容易溢位。而且這種無腦的計算方式,顯然不適合面試的時候裝nbility拿高薪offer。

本博主當時被問這個問題的時候的第一反應就是:要相乘產生0,那肯定是與5相乘的結果。對n!如果分解質因數的話,結果為0的個數只與2與5的個數有關,每一次2*5就能產生乙個0。因為2的個數肯定要大於5的個數,所以只要關注5的個數就可以了。

r et

=n/5

+n/5

2+n/

53+⋯

ret = n/5 + n/5^2 + n/5^3 +\cdots

ret=n/

5+n/

52+n

/53+

⋯思路講完了,按照我們的慣例:

talk is cheap, show me the code:

#!/usr/bin/env python

#coding:utf-8

'''@author: lei.wang

'''def fact_first(n):

ret = 0

for i in xrange(n+1):

j = i

while (j%5 == 0 and j > 0): #注意要加上j>0,否則會死迴圈

ret += 1

j /= 5

return ret

def fact_second(n):

ret = 0

while (n):

ret += n/5

n /= 5

return ret

if __name__ == '__main__':

ret_one = fact_first(100)

print "ret_one is: ",ret_one

ret_sec = fact_second(100)

print "ret_sec is: ",ret_sec

執行結果

ret_one is:  24

ret_sec is: 24

N階乘末尾0的個數

輸入乙個正整數n,求n 即階乘 末尾有多少個0?比如 n 10 n 3628800,所以答案為2 輸入為一行,n 1 n 1000 輸出乙個整數,即題目所求要判斷末尾有幾個0就是判斷可以整除幾次10。10的因子有5和2,而在0 9之間5的倍數只有乙個,2的倍數相對較多,所以本題也就轉換成了求n階乘中...

n的階乘問題 階乘位數 階乘末尾0的個數

初來乍到,望高手指教!原有解決n的階乘的方式 迭代,如果是大資料的話,迭代會吃掉大量記憶體,導致記憶體溢位 用平時的迭代解決n的階乘問題 在計算21的階乘時,結果已然為負數,超出整型資料表示範圍。計算34的階乘是,結果已然為0 此段 將n的階乘問題解決,實現無限大數的階乘!無限 兩字有點牽強,數字太...

演算法 階乘 n 求 末尾 0 的個數

最近在網上看到乙個這樣的演算法.就寫了出來.n 末尾有多少個 0 取決於從 1 到 n 的各個數的因子中 2 和 5 的個數。又因為 2 的個數遠遠多於 5 的個數,所以只要求出這當中 5 的個數即可。不斷地用 n 除以 5,直到結果為 0,將中間的結果都加起來,即可得到因子 5 的個數。例如,10...