我想打印一个没有" e + XX"的大整数。在Python的最后。
例如,当我写:
n = 100
k = 18
result = 1
i = 0
while i < k:
result = result * (n - i) / (i + 1)
i += 1
结果是3.066451080298821e + 19,我想要30664510802988208300。
答案 0 :(得分:3)
如果你想要一个整数,你必须使用整数除法,//
而不是/
,如@ farsil删除的答案所述。
result = 1
k = 18
n = 100
for i in range(k):
result = result * (n - i) // (i + 1)
print(result)
如果i + 1
始终是result * (n - i)
的除数,则只会得到正确的结果。但是,这总是如此,所以我们没事。
您不能使用/
,因为它将执行浮点除法,这会将结果截断为56位。正确的结果不适合56位:
In [1]: int(float(30664510802988208300))
Out[1]: 30664510802988208128
# ^^^ oops... off by 172
在这种情况下,当执行2除法时,我们将result
乘以n和n-1,其中至少有一个是2的倍数。当i + 1为3时,那么我们乘以n,n-1和n-2,其中至少有一个是3的倍数。这种模式适用于所有数字。
答案 1 :(得分:1)
我认为你真正想问的问题是“我如何在没有科学记数法的情况下用Python打印数字?”
答案是,你现在的号码是一个浮点数。试试print(type(result))
,您会看到float
。您可以通过int(result)
键入将其强制转换为整数,并将 close 显示为完整数字30664510802988208128
。由于int vs float的内存大小存储限制,它会有点过时。
更好的方法是:
result = 1
i = 0
while i < 18:
result = result * (100 - i) // (i + 1)
i += 1
print(result)
将result
保留为int类型。现在应该打印30664510802988208300