python - 使用 Python 检查整数溢出不起作用
问题描述
我正在处理一个编码挑战,我必须反转一个整数。如果整数只有 1 位,我按原样返回整数。如果它小于零,我将其反转但保持符号不变。我必须检查整数溢出以确保它在范围内[−231, 231 − 1]
。以下是我的代码:
def reverse(self, x: int) -> int:
if x >=0 and x <= 9:
return x
elif x > 9 and x < (2**31):
rever1 = str(x)[::-1]
return int(rever1)
elif x < 0 and x > (-2**31):
rever2 = str(x)[::-1]
rever2 = rever2[:-1]
rever2 = -1 * int(rever2)
return rever2
elif x <= (-2**31) or x >= (2**31):
return 0
我知道如何使这段代码更短,所以现在效率低下没问题。我只想知道为什么我的代码失败了1534236469
。
尽管我非常感谢所有帮助,但如果您只是告诉我代码失败的原因而不是给我一个快速的解决方案,它对我的帮助会更大。这些挑战背后的全部意义在于学习,所以如果有人只是提出答案,它就会失去目的。
解决方案
您检查输入值,而不是返回值。您给出的测试用例是“问题”类:输入数字在范围内,但反之则不在。
您还需要检查rever1
是否在范围内:
elif x > 9 and x < (2**31):
rever1 = str(x)[::-1]
return int(rever1)
可能
elif x > 9 and x < (2**31):
rever1 = str(x)[::-1]
if rever1 < (2**31):
return int(rever1)
else:
return 0
由于您计划适当地缩短代码,因此我不会详细介绍这些细节。
推荐阅读
- c# - 始终保持 WCF 连接打开与在每次调用时重新创建客户端
- opencv - 用于相机校准的圆形图案类型
- html - align-self:移动缩放时的 flex-end 中断
- javascript - 如何重置倒计时并避免多个计时器
- node.js - Elastic Beanstalk “错误 TS2688:找不到‘节点’的类型定义文件。”
- laravel-5.8 - 如何在 laravel 5.8 中发送短信
- eclipse - 与团队共享 Eclipse 设置
- .htaccess - 拒绝访问文件夹,但在网页上显示内容
- php - 添加新推文时如何解码推特 JSON?
- java - Selenium with Java:无法识别弹出窗口中的元素