checking integer overflow in python

I guess some thing light weight like below could perhaps achieve the same logic, For someone else looking , the main overflow check after reversed 32 bit int is

if(abs(n) > (2 ** 31 - 1)):
                    return 0    

Full code below

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

The largest 32-bit signed integer is (1 << 31) - 1 which is (2**31)-1 but not (2**32).

Try This way :

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)

Output :

0

change if(abs(sum) > 2 ** 32): to if(abs(sum) > (2 ** 31 - 1)): or abs(sum) > (1 << 31) - 1): The largest 32 bit signed interger is actually not 2^32 but (2 ^ (31)) -1). because we need one bit reserve as the sign bit.

Read about it here of why The number 2,147,483,647 (or hexadecimal 7FFF,FFFF) is the maximum positive value for a 32-bit signed binary integer

Tags:

Python