【发布时间】:2018-12-16 14:18:40
【问题描述】:
我想写一个函数来计算 (1 / n!) * (1! + 2! + 3! + ... + n!) 以 n 作为函数的参数,结果也被截断为6 位小数(未四舍五入)。 以下是我的代码:
def going(n):
n1 = n
n2 = n
factorial = 1
back = 1
for i in range(2, n1+1):
factorial *= i
while n2>1:
this = 1
for i in range(2, n2+1):
this*=i
back+=this
n2 = n2-1
this = 1
result = int((1/factorial)*back*1000000)/1000000
return result
当我将参数 171 传递给函数时,我得到了以下回溯:
Traceback (most recent call last):
File "/Users/Desktop/going.py", line 18, in <module>
print(going(171))
File "/Users/Desktop/going.py", line 15, in going
result = int((1/factorial)*back*1000000)/1000000
OverflowError: int too large to convert to float
我该如何解决这个问题?非常感谢您的帮助!
--更新-- 抱歉,我没有澄清:我在 Codewars 中解决了这个问题,我认为我不能导入任何要使用的库。所以,我需要一个可以避免使用任何库的解决方案。
来自 Codewars 的原始问题:
考虑以下数字(其中 n! 是阶乘 (n)):
u1 = (1 / 1!) * (1!)
u2 = (1 / 2!) * (1! + 2!)
u3 = (1 / 3!) * (1! + 2! + 3!)
un = (1 / n!) * (1! + 2! + 3! + ... + n!)
谁会赢:1 / n!或 (1!+ 2!+ 3!+ ... + n!)?
这些数字会因为 1/n 而变为 0!还是由于阶乘之和而无穷大?
任务
计算给定 n 的 (1 / n!) * (1! + 2! + 3! + ... + n!),其中 n 是大于或等于 1 的整数。
为避免讨论四舍五入,返回截断到小数点后 6 位的结果,例如:
1.0000989217538616 将被截断为 1.000098 1.2125000000000001 将被截断为 1.2125
备注
请记住,阶乘增长相当快,您需要处理大量输入。
【问题讨论】:
-
在 IRB 中尝试
2**9999与float(2**9999) -
你能从 codewars 发布原始和完整的问题吗?
标签: python python-3.x factorial