如何在python中找到大数的阶乘链?

如何在python中找到大数的阶乘链?,python,python-2.7,Python,Python 2.7,如果数字是3!!结果应该是6!那是720。 这段代码适用于小整数,但抛出的错误Python int太大,无法转换为大整数的C long。我需要帮助。谢谢 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 如果math.factorial不支持这么大的数字

如果数字是3!!结果应该是6!那是720。 这段代码适用于小整数,但抛出的错误Python int太大,无法转换为大整数的C long。我需要帮助。谢谢

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

如果math.factorial不支持这么大的数字,您可以自己做:

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

    >>> 4!!
    620448401733239439360000

然而,@interjay是正确的,math.factorial应该在合理的时间内适用于8以下的数字。不管怎样,算法应该是正确的,它可能永远不会回来,也可能永远不会为大数耗尽内存。

似乎math.factorial只能处理C整数。不过,实现自己的阶乘函数应该不会太难。但这可能是个坏主意,因为如果输入的数字已经那么大,那么计算可能需要很长时间。为什么要将阶乘乘以1?你可以用远程的代替while循环。试过了,比以前好多了。现在抛出大整数的运行时错误。我想,我应该和numpy一起去。这样做没有意义。大于10左右的大数字的结果将需要数十亿位数。你会如何打印它?当然,math.factorial24不是问题,但是试试100!!或类似的。然而,正如评论中所指出的,这只会把问题放在其他地方:得出的数字需要花费很多时间才能计算出来,而且会有数十亿位数。