【发布时间】:2017-11-18 18:20:37
【问题描述】:
我正在尝试解决leetcode.com 中处理signed 32bit integers 的练习。
任务是:
返回带符号的 32 位整数的倒数,如果超出 32 位带符号整数的范围,则返回 0。
一个 32 位寄存器可以存储 32 个不同的值。整数范围 可以存储在 32 位中的值取决于整数 使用的表示。有两种最常见的表示, 范围是 0 到 4,294,967,295 (2^32 − 1) 表示为 (无符号)二进制数,-2,147,483,648 (-2^31) 到 2,147,483,647 (2^31 − 1) 表示为二进制补码。
所以,如果我的理解是正确的,我应该在间隔 0 to (2^31)-1 和 (-2^31) to 0 之间进行测试,否则返回 0。
这是我的代码:
def reverse_int(nums):
a = str(nums)
if 0 < nums <= (1 << 31)-1:
return int(a[::-1])
elif (-1 << 31) <= nums < 0:
return -(int(a[:-len(a):-1]))
else:
return 0
这是我的问题: 当我在网站上测试我的代码时:
nums = 1534236469 # Fail
nums = 1463847412 # Success
nums = 9000000 # Success
为什么我当前的代码因1534236469 而失败? 1534236469 不是在 32 bit signed integers 的范围内吗?我错过了什么?
【问题讨论】:
-
在失败的情况下你会得到什么输出?
-
例如,对于网站上的
1534236469,它应该返回0。这意味着1534236469溢出了32 位有符号整数的范围。 -
但不会溢出。
-
在维基百科中他们说
the two most common representations。 32位整数还有其他表示吗? -
你需要反转然后检查是否溢出。