Python中整形溢出的问题

1. 整形的范围

[-2^31, 2^31 - 1]

2. 如何判断溢出

  若想判断x是否溢出,判断操作如下:

 M = (2 ^31 - 1) // 10
 y = x // 10
 z = x % 10
 if y > M or (y == M and z > 7):
   print(“溢出”)

3. 例子

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
你有注意到翻转后的整数可能溢出吗?因为给出的是32位整数,则其数值范围为[−2^31, 2^31 − 1]。翻转可能会导致溢出,如果反转后的结果会溢出就返回 0。

示例1:

输入:12
输出:21

示例2:

输入:-123
返回值:-321

示例3:

输入:1147483649
返回值:0

4. Code

 1 class Solution:
 2     def reverse(self, x):
 3         # 判断符号
 4         # 默认正好
 5         MAX, MIN = 2**31 - 1, -(2 ** 31)
 6         print(MAX, MIN)
 7         M = MAX // 10
 8         flag = True
 9         if x == 0:
10             return 0
11         elif x < 0:
12             x = -x
13             # 负号
14             flag = False
15 
16         res = 0
17         while x > 0:
18             x, v = divmod(x, 10)
19             if res > M or (res == M and v > 7):
20                 return 0
21             res = res * 10 + v
22         return res if flag else -res
23 
24 
25 if __name__ == '__main__':
26     x = 2123456789
27     print(Solution().reverse(x))

 5. 结语

  努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

  如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。

但行好事 莫问前程
原文地址:https://www.cnblogs.com/haifwu/p/15311178.html