python经典百题之判断回文数

2023-09-22 12:17:06

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

更多推荐

使用Oracle实现完美的不重复随机数(oracle不重复随机数

使用Oracle实现完美的不重复随机数Oracle是一个功能强大的关系型数据库管理系统,它可以实现各种数据库操作和管理。在许多应用程序中,生成随机数是一个非常常见的任务。然而,许多时候,我们需要生成不重复的随机数,以确保数据的完整性和准确性。下面我们将介绍如何使用Oracle实现完美的不重复随机数。生成不重复随机数的方

Linux系统编程——进程间通信的学习

学习参考博文:进程间的五种通信方式介绍Linux信号介绍Linux系统编程学习相关博文Linux系统编程——文件编程的学习Linux系统编程——进程的学习Linux系统编程——线程的学习Linux系统编程——网络编程的学习Linux系统编程——进程间通信的学习一、概述1.无名管道和有名管道的区别2.当打开一个FIFO时

智能热水器语音控制丨打造智能家居新体验

随着科学技术的不断发展,智能电器越来越被大众所采纳,如智能扫地机,智能洗衣机,智能微波炉等等,越来越智能的电器为人们的生活带来了许多便利。以往的热水器一般都是只有按键/机械的控制方式,没有其他无线控制的控制方式。但现在新增了语音功能控制。用户通过语音控制智能热水器进行加热或保温等操作,无需用户手动控制;为人们带来了全新

电脑怎么录音,亲身测评,让你事半功倍!

“电脑怎么录音呀?最近学校的十大歌手比赛快开始了,需要自己录制一段音频线上参赛,通过的人才能参与线下的复赛,可是我的伴奏一直有杂音,就想问问大家,有没有比较好用的电脑录音方法呀?”在当今这个信息爆炸的时代,录音已经成为我们日常生活中不可或缺的一部分。无论是录制会议、讲座、课程还是简单的个人笔记,录音工具都能为我们带来极

从丢失msvcp140_codecvt_ids.dll到修复,解决方法详解

在日常计算机使用过程中,我们有时会遇到一些烦人的错误提示。其中之一就是丢失了msvcp140_codecvt_ids.dll文件。当我们打开某些应用程序或游戏时,可能会收到类似于“找不到msvcp140_codecvt_ids.dll”或“该应用程序无法正常启动”的错误信息。这可能会影响我们的工作效率或是影响我们游戏的

字符串函数----篇章(1)

目录补上章缺失的两道题七.笔试题(7)八.笔试题(8)一.字符串函数(1)----strlen函数二.字符串函数(2)----strcpy函数2-1模拟实现strcpy三.字符串函数(3)----strcmp函数​编辑3-1模拟实现strcmp四.字符串函数(4)----strcat函数​编辑4-1模拟实现strcat

IBM LSF 任务调度系统的主要术语和概念

LSF术语和概念了解IBMLSF基本术语和概念。作业状态IBM®SpectrumLSF作业具有多个状态。PEND正在队列中等待调度和分派。RUN已分派到主机并正在运行。DONE正常完成,退出值为零。EXIT已完成,具有非零退出值。PSUSP作业处于暂挂状态时已暂挂。USUSP由用户暂挂。SSUSP由LSF系统暂挂。PO

博格华纳高压发卡式电机解析

博格华纳的高压发卡式电机具有功率强大、坚固耐用和高性能等特点,采用紧凑型设计,优化的导体绕组结构缩短了电机的尺寸,使其便于在更小的空间内进行安装,并提高了常用区间的工作效率。此外,电机在设计上减少了重稀土元素,降低了电机成本,通过优化辅助槽,实现了出色的噪声(NVH)、振动及舒适度的表现,在满足客户对汽车静谧性需求的同

SLAM从入门到精通(服务通信)

【声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:feixiaoxing@163.com】前面我们谈到了消息通信,但是这种通信是单向的。也就是一个人发送消息,一个人接收消息,仅此而已。在ros当中,还有一种通信,称之为服务通信。它和单项通信最大的区别就是,我们把数据发送给对方,还能得到对方的反馈结果。这在很多场合

AIGC|从革新内容创作到社会共识建立,迎接全新技术维度

在人工智能的巨浪之下,我们身临一场前所未有的文化演变,一股革命性的力量正在重新定义我们的创造性边界。这股力量不是人类的智慧,而是人工智能生成内容(AIGC)技术,它正以前所未有的速度和广度改变着我们的世界。从创意到实用,从文化到商业,AIGC技术正引领着我们进入一个崭新的时代,在其中,既有挑战也有机遇。当前,新技术的广

ruoyi框架开发LOT项目

背景最近闲着就用ruoyi的框架写了一个LOT项目,个人觉得效果还可以。1、首页2、企业管理3、用户管理4、设备列表5、设备列表标签展示6、设备详情页面7、大屏展示界面8、结束-----华丽的分割线,以下是凑字数,大家不用花时间看,快去改代码----------华丽的分割线,以下是凑字数,大家不用花时间看,快去改代码-

热文推荐