如何管理Python中的大数字划分?

时间:2015-01-14 15:32:30

标签: python floating-point integer division

我有一个100位的数字,我试图将数字的所有数字放入一个列表,以便我可以对它们执行操作。为此,我使用以下代码:

for x in range (0, 1000):
   list[x] = number % 10
   number = number / 10

但是我遇到的问题是我遇到溢出错误,例如浮点数/整数太大。我甚至尝试使用以下替代

number = int (number / 10)

如何将这个庞大的数字除以整数类型的结果,即没有浮动?

4 个答案:

答案 0 :(得分:33)

在Python 3中,number / 10会尝试返回float。但是,浮点值在Python中可能是任意大的,如果number很大,则会引发OverflowError

您可以使用sys模块找到系统上Python浮点值的最大值:

>>> import sys
>>> sys.float_info.max
1.7976931348623157e+308

要解决此限制,请使用//从两个整数的除法中获取整数:

number // 10

这将返回int楼层值number / 10(它不会产生浮动)。与浮点数不同,int值可以与Python 3中的值一样大(在内存限制内)。

您现在可以分割大数字。例如,在Python 3中:

>>> 2**3000 / 10
OverflowError: integer division result too large for a float

>>> 2**3000 // 10
123023192216111717693155881327...

答案 1 :(得分:6)

如果您有一个整数,并且您希望列表中的每个数字,您可以使用:

>>> map(int,list(str(number)))
[1, 5, 0, 3, 0, 0, 7, 6, 4, 2, 2, 6, 8, 3, 9, 7, 5, 0, 3, 6, 6, 4, 0, 5, 1, 2, 4, 3, 7, 8, 2, 5, 2, 4, 4, 5, 4, 8, 4, 0, 6, 6, 4, 5, 0, 9, 2, 4, 8, 9, 2, 9, 7, 8, 7, 3, 9, 9, 9, 7, 0, 1, 7, 4, 8, 2, 4, 4, 2, 9, 6, 9, 5, 1, 7, 1, 3, 4, 8, 5, 1, 3, 3, 1, 7, 9, 0, 1, 0, 1, 9, 3, 8, 4, 2, 0, 1, 9, 2, 9]

它将int转换为字符串,然后list将获取字符串的每个字符并将其放入列表中。最后,map会将列表中的每个项目再次转换为int

答案 2 :(得分:2)

Python将自动处理任意长度的大int个。它所取得的成就是处理任意长度的float,所以你需要确保你不会在途中获得浮动。

答案 3 :(得分:0)

试试int(number) % 10。你只能修改整数。