2015-10-26 48 views
0

如果編號爲3!!應導致6!720。 此代碼適用於小整數,但對於大整數會引發錯誤Python int too large to convert to C long。需要幫忙。由於如何在Python中找到大數的階乘鏈?

import math 
n = raw_input() 
a = n.count('!') 
b= int(n.replace('!','')) 
while(a!=0): 
    fact =1*math.factorial(b) 
    b = fact 
    a-=1 
print fact 
+0

似乎'math.factorial'只能處理C整數。儘管如此,不應該太難實現自己的因子函數。 (但這可能是一個壞主意,因爲如果輸入數量已經很大,那麼這些計算可能會花費很長時間)。 –

+0

你爲什麼要乘以1的階乘?您可以用範圍替換while循環。 – postelrich

+0

試過了,比以前好多了。現在爲大整數引發運行時錯誤。我想,我應該與numpy一起去。 –

回答

0

如果math.factorial不支持這樣大的數字,你可以自己做:

fact = reduce(lambda x, y: x * y, [x+1 for x in range(b)]) 

    >>> 4!! 
    620448401733239439360000 

然而,@interjay是正確的,math.factorial()應該工作的人數最多8在合理的時間。無論如何,該算法應該是正確的,它可能永遠不會回來或大量內存不足。

+0

'math.factorial(math.factorial(4))'適合我。 – interjay

+0

當然,'math.factorial(24)'不是問題,而是嘗試'100 !!'或類似的。然而,正如評論中指出的那樣,這隻會將問題放在其他地方:結果的數字將需要很長的時間來計算,並且會有數十億的數字。 –