Я хочу написать функцию, которая вычисляет (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
Как я могу решить эту проблему?Большое спасибо за помощь!
- update-- Извините, что не уточнил: я делаю эту проблему в 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!)?
Эти числа равны 0 из-за 1 / n!или в бесконечность из-за суммы факториалов?
Задание
Вычислить (1 / n!) * (1! + 2! + 3! + ... ...+ n!) для данного n, где n - целое число, большее или равное 1.
Чтобы избежать дискуссий о округлении, верните усеченный результат до 6 десятичных знаков, например:
1.0000989217538616 будет усечено до 1.000098 1.2125000000000001 будет усечено до 1.2125
Примечание
Имейте в виду, что факториалы растут довольно быстро, и вам необходимо обрабатывать большие входные данные.