检查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)