在Python中打印一个大整数

时间:2017-03-16 16:42:36

标签: python

我想打印一个没有" 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。

2 个答案:

答案 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