首页 > 解决方案 > 使用 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

尽管我非常感谢所有帮助,但如果您只是告诉我代码失败的原因而不是给我一个快速的解决方案,它对我的​​帮助会更大。这些挑战背后的全部意义在于学习,所以如果有人只是提出答案,它就会失去目的。

标签: pythonalgorithm

解决方案


您检查输入值,而不是返回值。您给出的测试用例是“问题”类:输入数字在范围内,但反之则不在。

您还需要检查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

由于您计划适当地缩短代码,因此我不会详细介绍这些细节。


推荐阅读