Python 3分割两个大数时输出错误?

5 投票
3 回答
2852 浏览
提问于 2025-04-17 03:08
a = 15511210043330985984000000  # (25!)
b = 479001600                   # (12!)
c = 6227020800                  # (13!)

在计算 ans = int(a/(b*c)) 或者 ans = int((a/b)/c) 的时候,我们得到的 ans5200299,而不是 5200300

3 个回答

3

你的问题(没有使用整数运算)在Python 3.2中被自动处理了:

Python 3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200300.0
>>> repr(15511210043330985984000000 / (479001600 * 6227020800))
'5200300.0'
>>> int(15511210043330985984000000 / (479001600 * 6227020800))
5200300

Python 3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200299.999999999
>>> repr(15511210043330985984000000 / (479001600 * 6227020800))
'5200299.999999999'
>>> int(15511210043330985984000000 / (479001600 * 6227020800))
5200299

我有点困惑:你用int()这个函数是因为你意识到它给出的结果是一个float(浮点数)。那么,为什么你没有进一步采取(显而易见的?)步骤去四舍五入呢,比如:

[3.1.3]
>>> int(round(15511210043330985984000000 / (479001600 * 6227020800)))
5200300

?

4

试着用整数除法,而不是浮点数除法。

>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200299.999999999
>>> 15511210043330985984000000 // (479001600 * 6227020800)
5200300
11

在Python 3.x中,/表示浮点数除法,这种除法可能会有一些小的四舍五入误差。如果你想进行整数除法,可以使用//

ans = a // (b*c)

撰写回答