题目:一个5位数,判断它是不是回文数
即12321是回文数,个位与万位相同,十位与千位相同
程序分析
回文数是指一个数从左向右和从右向左读是一样的,例如:12321。我们需要编写一个程序来判断一个5位数是否是回文数。
方法1: 转换成字符串
def is_palindrome(num):
num_str = str(num)
return num_str == num_str[::-1]
def main():
num = int(input("请输入一个5位数: "))
if is_palindrome(num):
print("是回文数")
else:
print("不是回文数")
if __name__ == "__main__":
main()
解题思路:
- 将数字转换成字符串,然后判断反转后的字符串是否和原始字符串相等。
优点:
- 实现简单,逻辑清晰。
缺点:
- 需要将数字转换成字符串,会引入一定的额外开销。
方法2: 反转数字
def is_palindrome(num):
reversed_num = 0
original_num = num
while num > 0:
remainder = num % 10
reversed_num = reversed_num * 10 + remainder
num //= 10
return reversed_num == original_num
def main():
num = int(input("请输入一个5位数: "))
if is_palindrome(num):
print("是回文数")
else:
print("不是回文数")
if __name__ == "__main__":
main()
解题思路:
- 将数字反转,然后判断反转后的数字是否和原始数字相等。
优点:
- 不需要额外的空间,只需要数值运算。
缺点:
- 需要遍历两次数字。
方法3: 使用数组
def is_palindrome(num):
digits = []
original_num = num
while num > 0:
digits.append(num % 10)
num //= 10
# 逐位判断是否是回文数
for i in range(len(digits) // 2):
if digits[i] != digits[len(digits) - i - 1]:
return False
return True
def main():
num = int(input("请输入一个5位数: "))
if is_palindrome(num):
print("是回文数")
else:
print("不是回文数")
if __name__ == "__main__":
main()
解题思路:
- 将数字的每一位存储到数组中,然后逐位比较判断是否是回文数。
优点:
- 不需要额外的空间,只需要数值运算。
缺点:
- 需要遍历两次数字。
方法总结及推荐
-
推荐方法: 方法1和方法2都是很好的选择,它们不需要额外空间,只需要数值运算,并且代码简洁明了。
-
适用场景:
- 对于这种回文数判断问题,推荐使用方法1或方法2。它们不需要额外的空间,效率较高。
- 如果问题需要将数字转换成字符串,可以考虑方法1,但需要注意额外开销。
综上所述,方法1(转换成字符串)和方法2(反转数字)是较好的选择,可以根据具体场景选择其中一种。方法3(使用数组)也可用,但由于可能引入额外空间,不推荐在不必要的情况下使用。