如何处理python中的非常大的数字(19位)

时间:2012-09-28 19:48:01

标签: python largenumber

在python中,我需要能够遍历一个19位的数字;这样做的典型方式是什么?我正在使用python 2.7.x;但如果有可行的解决方案,将使用python 3.x.

我的人数很多;例如1000**5(甚至更大的1000**10);我需要在for循环中遍历这个数字列表。我知道它需要的时间;但是因为我找不到循环通过这么大的数字的方法,我不知所措。

我在python 2.7中尝试使用xrangerangeitertools.islice并收到Overflow错误。

由于

4 个答案:

答案 0 :(得分:3)

以下是python 3.x:

python中的int类型没有限制。如果你想迭代0,1,2 ... n,其中n是一个19位数字,你可以这样做:

for i in range(n):
    pass #whatever you like

虽然这需要很长时间。

答案 1 :(得分:2)

不是那么漂亮,但只是使用while(),你将克服这个问题(加上它适用于任何版本的Python):

i=0
while (i<1000**10):
    i += 1
    # do some stuff

答案 2 :(得分:0)

如果您尝试迭代单个数字:

long_int_string = '34234345456575657'
for digit in [int(x) for x in long_int_string]:
    # do something useful with digit        
    print digit

答案 3 :(得分:0)

听起来你想要遍历整数的各个数字。 对于这样的情况,知道x % 10等于十进制中正整数x的最右边数字是有用的。 考虑到这一点,您可以通过迭代使用模数并减少数量来获得每个数字。

def splitIntoDigits(x):
    digits = []
    while x != 0:
        digits.insert(0, int(x%10))
        x /= 10
    return digits

print splitIntoDigits(15016023042)
[1, 5, 0, 1, 6, 0, 2, 3, 0, 4, 2]

另外,喜剧单行答案:

>>> [int(num/(10**x)%10) for x in range(int(math.log(num,10)),-1,-1)]
[1, 5, 0, 1, 6, 0, 2, 3, 0, 4, 2]