鱼C论坛

 找回密码
 立即注册
查看: 2672|回复: 3

[已解决]大佬可以给小白解释一下python中回文数的代码含义吗

[复制链接]
发表于 2022-1-28 22:37:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大佬可以给小白解释一下python中回文数的代码含义吗?具体的工作原理
  1. x = int(input("请输入一个正整数:"))

  2. if x < 0 or (x % 10 == 0 and x != 0):
  3.     print("不是回文数。")
  4. else:
  5.     revertedNumber = 0
  6.     while x > revertedNumber:
  7.         revertedNumber = revertedNumber * 10 + x % 10
  8.         x //= 10

  9.     if x == revertedNumber or x == revertedNumber // 10:
  10.         print("是回文数。")
  11.     else:
  12.         print("不是回文数。")
复制代码

最佳答案
2022-1-29 11:24:57
本帖最后由 isdkz 于 2022-3-15 09:58 编辑

首先回文数得是一个正整数,因为正常的数字除0以外,最高位不能为0,所以除0以外最低位为0的数字也不是回文数,因为它反向排列就是最高位为0了
  1. if x < 0 or (x % 10 == 0 and x != 0):
  2.     print("不是回文数。")
复制代码

如果不满足以上不是回文数的条件,则对该数字反向排列
  1. else:
  2.     revertedNumber = 0      # 先假设它反向排列的数字为0
  3.     while x > revertedNumber:     # 如果它大于0,即它反向排列不是0,因为只有0的反向排列为0
  4.         revertedNumber = revertedNumber * 10 + x % 10   # 则将它最低位移向高一位,取x的最低位作为自己的最低位
  5.         x //= 10  # x丢弃自己的最低位
  6.         # 直到x<=revertedNumber退出循环,这时revertedNumber的位数等于或大于现在的x的位数且revertedNumber是原x丢弃的位数的1/2位或 (1/2)+1 位的逆向排列
复制代码

如果revertedNumber的位数等于x的位数(即原x的1/2位),revertedNumber与现在的x相等即原x为回文数
如果revertedNumber的位数等于x的位数+1(即原x的(1/2)+1 位),revertedNumber丢弃最后一位(即原x的中间位)后与现在的x相等即原x为回文数
  1.     if x == revertedNumber or x == revertedNumber // 10:
  2.         print("是回文数。")
  3.     else:
  4.         print("不是回文数。")
复制代码


注:x // 10 地板除法实现丢弃最后一位的效果, x % 10 取余实现取最后一位的效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-29 11:24:57 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2022-3-15 09:58 编辑

首先回文数得是一个正整数,因为正常的数字除0以外,最高位不能为0,所以除0以外最低位为0的数字也不是回文数,因为它反向排列就是最高位为0了
  1. if x < 0 or (x % 10 == 0 and x != 0):
  2.     print("不是回文数。")
复制代码

如果不满足以上不是回文数的条件,则对该数字反向排列
  1. else:
  2.     revertedNumber = 0      # 先假设它反向排列的数字为0
  3.     while x > revertedNumber:     # 如果它大于0,即它反向排列不是0,因为只有0的反向排列为0
  4.         revertedNumber = revertedNumber * 10 + x % 10   # 则将它最低位移向高一位,取x的最低位作为自己的最低位
  5.         x //= 10  # x丢弃自己的最低位
  6.         # 直到x<=revertedNumber退出循环,这时revertedNumber的位数等于或大于现在的x的位数且revertedNumber是原x丢弃的位数的1/2位或 (1/2)+1 位的逆向排列
复制代码

如果revertedNumber的位数等于x的位数(即原x的1/2位),revertedNumber与现在的x相等即原x为回文数
如果revertedNumber的位数等于x的位数+1(即原x的(1/2)+1 位),revertedNumber丢弃最后一位(即原x的中间位)后与现在的x相等即原x为回文数
  1.     if x == revertedNumber or x == revertedNumber // 10:
  2.         print("是回文数。")
  3.     else:
  4.         print("不是回文数。")
复制代码


注:x // 10 地板除法实现丢弃最后一位的效果, x % 10 取余实现取最后一位的效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2022-1-29 13:51:36 | 显示全部楼层
isdkz 发表于 2022-1-29 11:24
首先回文数得是一个正整数,因为正常的数字除0以外,最高位不能为0,所以除0以外最低位为0的数字也不是回文 ...

谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-13 19:37:18 | 显示全部楼层
谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 09:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表