检查python中的整数溢出
但其中一个测试用例给了我:检查python中的整数溢出,python,Python,但其中一个测试用例给了我: if(abs(sum) > 2 ** 32): return 0 首先,我不知道为什么会溢出,也不知道如何修复 谢谢 将if(abs(sum)>2**32):更改为if(abs(sum)>(2**31-1)):或abs(sum)>(1最大的32位有符号整数是(1我想下面一些轻量级的东西可能实现相同的逻辑,对于其他人来说,反转32位int后的主要溢出检查是 0 完整代码如下 if(abs(n) > (2 **
if(abs(sum) > 2 ** 32):
return 0
首先,我不知道为什么会溢出,也不知道如何修复
谢谢 将
if(abs(sum)>2**32):
更改为if(abs(sum)>(2**31-1)):
或abs(sum)>(1最大的32位有符号整数是(1我想下面一些轻量级的东西可能实现相同的逻辑,对于其他人来说,反转32位int后的主要溢出检查是
0
完整代码如下
if(abs(n) > (2 ** 31 - 1)):
return 0
def反转(自身,x):
负=假
如果x<0:
负=真
x=x*-1
s=str(x)[:-1]
n=int(s)
如无:
n=n*-1
如果(abs(n)>(2**31-1)):
返回0
返回n
您只需使用:
def reverse(self, x):
neg = False
if x < 0:
neg = True
x = x * -1
s = str(x)[::-1]
n = int(s)
if neg:
n = n*-1
if(abs(n) > (2 ** 31 - 1)):
return 0
return n
如果sum>(1最大的32位有符号整数是(1假设您正在检查有符号整数,您需要abs(sum)>2**31-1
(或者更好的是,abs(sum)>(1)此代码比它需要的复杂得多。例如,您可以在一个步骤中反转字符串,您不需要For
循环来执行此操作。顺便说一句,使用sum
作为变量名不是一个好主意,因为这会隐藏内置的sum
函数。不过,这不会对这里造成任何影响。我认为这是错误的r应该提供理由为什么?似乎有人对我的答案投了赞成票。但我仍然希望谁投了反对票都能给出解释。是的,谁投了反对票?我选择了你的答案。谢谢你的解释!@OLIVER.KOO我理解保留1位作为符号位,所以不是32的幂,而是31的幂。但是你能解释为什么是“减1”吗为什么不是(2**31)?谢谢!我想最小的32位有符号整数是-2**31@ErikvonAsmuth确定
Expected: 0
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) > ((1 << 31) - 1)): #use (1 << 31) - 1) instead of 2 ** 32
return 0
elif (negative == True):
return sum * -1
else:
return sum
if __name__ == '__main__':
x = 1563847412
sol = Solution().reverse(x)
print(sol)
0
if(abs(n) > (2 ** 31 - 1)):
return 0
def reverse(self, x):
neg = False
if x < 0:
neg = True
x = x * -1
s = str(x)[::-1]
n = int(s)
if neg:
n = n*-1
if(abs(n) > (2 ** 31 - 1)):
return 0
return n
if sum >= pow(2,31)-1:
return 0
if sum > ((1 << 31) - 1):
return 0
else:
if negative == True:
sum = -sum
return sum
class Solution:
def reverse(self, x: int) -> int:
split = [i for i in str(x)]
split = split[::-1]
final = ''
if split[-1]=='-':
final += '-'
for i in split[0:-1]:
print(i)
final+=i
else:
for i in split[0:]:
final+=i
final = int(final)
if(abs(final) > (2 ** 31 - 1)):
return 0
return(final)