我正在尝试解决 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
范围内吗?我缺少什么?
原文由 Chiheb Nexus 发布,翻译遵循 CC BY-SA 4.0 许可协议
如评论中所述,您必须 先反转 然后检查。然而,这里有一种不同的检查方式。
要检查你可以
&
带有适当掩码的结果。So in your case the limits are
−2,147,483,648
and2,147,483,647
the hex values of them are-0x80000000
and0x7fffffff
在解释器中试试这个。
超出限制的值,您可以看到显示其他一些值。
但是当值在限制范围内时。该值作为输出给出。
对于负值
当值在范围内时。该 限制 作为输出给出。
但是,如果值超出范围,您会看到显示了一些其他值。
你可以好好利用这一点,得到你想要的!
这是一个可以执行您想要的操作的程序。
下面的部分只是反转负值和正值。
设置限制
neg_limit= -0x80000000
和pos_limit= 0x7fffffff
并根据解释的逻辑检查它们。