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。我试图检查就行了检查python中的整数溢出
if(abs(sum) > 2 ** 32):
return 0
但测试用例一个给我:
Input: 1563847412
Output: 2147483651
Expected: 0
首先,我不知道为什么这溢出了,我不知道如何解决这个问题。
谢谢!
最大的32位有符号整数ULL代码是'(1 << 31) - 1',这是2147483647。 –
假设你正在检查符号整数,则需要'ABS(SUM)> 2 ** 31 - 1'(或者更好,abs(sum)>(1 << 31) - 1') –
这段代码比它需要的复杂得多。例如,你可以在一个步骤中反转一个字符串,你不需要'for'循环来完成它。顺便说一句,使用'sum'作为变量名并不是一个好主意,因为它隐藏了内置的'sum'函数。不过这不会伤害任何东西。 –