我正在尝试制作一个可以计算987654321阶乘的程序,但我找不到办法。
def range_prod(lo,hi):
if lo+1 < hi:
mid = (hi+lo)//2
return range_prod(lo,mid) * range_prod(mid+1,hi)
if lo == hi:
return lo
return lo*hi
def treefactorial(n):
if n < 2:
return 1
return range_prod(1,n)
print(treefactorial(987654321))
答案 0 :(得分:3)
建议的方法需要很长时间才能计算出来。如果你没有失去一些精度,你可以使用LogGamma函数快速得到一个近似值,例如
math.exp(scipy.special.gammaln(3+1))
=> 6.0
scipy.special.gammaln(987654322)
=> 19467499583.824226
所以987654321!
约为exp(19467499583.824226)
,您可以转换为log 10
基数来查找位数......
PS。它将拥有超过80亿的数字。
答案 1 :(得分:0)
您可以使用内置math.factorial
import math
math.factorial(n)
或者您可以使用reduce
函数计算阶乘
from operator import mul
for Python 2.7
factorial = lambda n: reduce(mul, xrange(1, n+1))
for Python 3
factorial = lambda n: reduce(mul, range(1, n+1))
>>> factorial(987654321)