我是pyhon的初学者,我正在尝试反转阶乘函数。 5的阶乘是120 我想让我的代码输入120,然后返回5 这是我现在的密码:
`from math import factorial
def rf(f):
d=2
while f/factorial(d) != 1:
if f/factorial(d) <= 1:
print("Entered number is not a factorial")
return
d += 1
return int(d)`
它可以将阶乘反转到170。但是当我输入171的阶乘时,代码进入OverFlowError。 我的代码有解决方案吗? 或者,一个更可靠的代码来反转阶乘。你知道吗
尽管@NPE的解决方案更简洁、更高效,但您可以使用原始代码,只需做一点小小的修改即可:使用返回整数的floor division
//
,而不是普通的division/
:当前的问题是,您使用的是浮点数学,而浮点数学的范围有限:
(
170!
比这个小,但是171!
比这个大。)如果您坚持整数数学,您将避开这个问题,因为Python整数只受可用内存量的限制,因此可以变得更大。你知道吗
同样值得注意的是,反复调用
factorial()
是非常昂贵的。你知道吗如果是我,我会这样做:
这将输入除以
2
然后3
然后4
等,直到结果为1
,同时确保余数始终保持零。你知道吗我用^{} 同时计算商和每个除法步骤的余数。你知道吗
相关问题 更多 >
编程相关推荐