如何管理 Python 中的大数除法?
How to manage division of huge numbers in Python?
我有一个 100 位数的号码,我试图将号码的所有数字放入一个列表中,以便我可以对它们执行操作。为此,我使用以下代码:
for x in range (0, 1000):
list[x] = number % 10
number = number / 10
但我面临的问题是我遇到了一个溢出错误,比如数字太大 float/integer。我什至尝试使用以下替代方法
number = int (number / 10)
如何将这个巨大的数字除以整数类型的结果,即没有浮点数?
尝试int(number) % 10
。您只能 mod 个整数。
Python 将自动处理任意长度的大型 int
。它不会做的是处理任意长度的 float
s,所以你需要确保你不会在途中得到花车。
如果你有一个整数并且你想要列表中的每个数字,你可以使用:
>>> 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
在Python3中,number / 10
会尝试return一个float
。但是,Python 中的浮点值不能任意大,如果 number
很大,则会引发 OverflowError
。
您可以使用 sys
模块找到 Python 浮点值可以在您的系统上使用的最大值:
>>> import sys
>>> sys.float_info.max
1.7976931348623157e+308
要绕过此限制,请改用 //
从两个整数相除得到一个整数:
number // 10
这将 return number / 10
的 int
下限值(它不会产生浮动)。与浮点数不同,int
值可以在 Python 3(在内存限制内)中的大小。
您现在可以划分大数了。例如,在 Python 3:
>>> 2**3000 / 10
OverflowError: integer division result too large for a float
>>> 2**3000 // 10
123023192216111717693155881327...
我有一个 100 位数的号码,我试图将号码的所有数字放入一个列表中,以便我可以对它们执行操作。为此,我使用以下代码:
for x in range (0, 1000):
list[x] = number % 10
number = number / 10
但我面临的问题是我遇到了一个溢出错误,比如数字太大 float/integer。我什至尝试使用以下替代方法
number = int (number / 10)
如何将这个巨大的数字除以整数类型的结果,即没有浮点数?
尝试int(number) % 10
。您只能 mod 个整数。
Python 将自动处理任意长度的大型 int
。它不会做的是处理任意长度的 float
s,所以你需要确保你不会在途中得到花车。
如果你有一个整数并且你想要列表中的每个数字,你可以使用:
>>> 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
在Python3中,number / 10
会尝试return一个float
。但是,Python 中的浮点值不能任意大,如果 number
很大,则会引发 OverflowError
。
您可以使用 sys
模块找到 Python 浮点值可以在您的系统上使用的最大值:
>>> import sys
>>> sys.float_info.max
1.7976931348623157e+308
要绕过此限制,请改用 //
从两个整数相除得到一个整数:
number // 10
这将 return number / 10
的 int
下限值(它不会产生浮动)。与浮点数不同,int
值可以在 Python 3(在内存限制内)中的大小。
您现在可以划分大数了。例如,在 Python 3:
>>> 2**3000 / 10
OverflowError: integer division result too large for a float
>>> 2**3000 // 10
123023192216111717693155881327...