class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
negative = False
if(x < 0):
x = x * -1
negative = True
else:
x = x
sum = 0
dig = 1
strX = str(x)
lst = list(strX)
for i in lst:
sum += int(i) * dig
dig *= 10
if(abs(sum) > 2 ** 32):
return 0
elif(negative == True):
return sum * -1
else:
return sum
这是一个要求我们反转整数的 leetcode 问题。我知道这是一个脏代码,但它仍然有效,但当反转整数溢出时它不会返回 0。我试着在线检查
if(abs(sum) > 2 ** 32):
return 0
但是其中一个测试用例给了我:
Input: 1563847412
Output: 2147483651
Expected: 0
首先,我不确定为什么会溢出,我也不确定如何解决这个问题。
谢谢!
原文由 Dukakus17 发布,翻译遵循 CC BY-SA 4.0 许可协议
将
if(abs(sum) > 2 ** 32):
更改为if(abs(sum) > (2 ** 31 - 1)):
或abs(sum) > (1 << 31) - 1):
最大的 32 位带符号整数实际上不是 2^1 (2^321) 而是 (2)。因为我们需要 保留一位作为符号位。在这里 阅读为什么数字 2,147,483,647(或十六进制 7FFF,FFFF)是 32 位有符号二进制整数的最大正值