如何解决回文测试器给False表示11,但返回True表示121
这是我的代码:
def isPalindrome(x):
if x < 0 or (x % 10 == 0 and x != 0):
return False
rev = 0
while x > rev:
rev = (rev*10 + x % 10)
x /= 10
return x == rev or x == rev/10
x = 11
print(isPalindrome(x))
为什么此代码不能为所有正整数输入提供理想的结果?
解决方法
您的代码有两个问题。
第一个是x /= 10
执行浮点除法,因此11 /= 10
是1.1
,而不是1
。 Python中的整数除法是//
。
第二个原因是您不想在x > rev
时而是在x > 0
时继续循环,因为您想反转数字的每一位。在x > 0
时,您在x
中仍有尚未添加到反转值的数字。取反值的累加部分大于仍要处理的答案部分,这并不意味着什么。
因此,这是您的代码的有效版本,至少适用于您的两个测试用例,而我还做了其他一些工作。我没有做详尽的测试。
def isPalindrome(x):
if x < 0 or (x % 10 == 0 and x != 0):
return False
rev = 0
y = x
while y > 0:
rev = (rev*10 + y % 10)
y //= 10
return x == rev or x == rev/10
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。