python经典百题之判断回文数

题目:一个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(使用数组)也可用,但由于可能引入额外空间,不推荐在不必要的情况下使用。

你可能感兴趣的:(python经典百题,python,开发语言)