隔壁老程呀 发表于 2022-1-28 22:37:35

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

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

if x < 0 or (x % 10 == 0 and x != 0):
    print("不是回文数。")
else:
    revertedNumber = 0
    while x > revertedNumber:
      revertedNumber = revertedNumber * 10 + x % 10
      x //= 10

    if x == revertedNumber or x == revertedNumber // 10:
      print("是回文数。")
    else:
      print("不是回文数。")

isdkz 发表于 2022-1-29 11:24:57

本帖最后由 isdkz 于 2022-3-15 09:58 编辑

首先回文数得是一个正整数,因为正常的数字除0以外,最高位不能为0,所以除0以外最低位为0的数字也不是回文数,因为它反向排列就是最高位为0了
if x < 0 or (x % 10 == 0 and x != 0):
    print("不是回文数。")
如果不满足以上不是回文数的条件,则对该数字反向排列
else:
    revertedNumber = 0      # 先假设它反向排列的数字为0
    while x > revertedNumber:   # 如果它大于0,即它反向排列不是0,因为只有0的反向排列为0
      revertedNumber = revertedNumber * 10 + x % 10   # 则将它最低位移向高一位,取x的最低位作为自己的最低位
      x //= 10# x丢弃自己的最低位
      # 直到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为回文数
    if x == revertedNumber or x == revertedNumber // 10:
      print("是回文数。")
    else:
      print("不是回文数。")

注:x // 10 地板除法实现丢弃最后一位的效果, x % 10 取余实现取最后一位的效果

隔壁老程呀 发表于 2022-1-29 13:51:36

isdkz 发表于 2022-1-29 11:24
首先回文数得是一个正整数,因为正常的数字除0以外,最高位不能为0,所以除0以外最低位为0的数字也不是回文 ...

谢谢大佬

shinerl 发表于 2022-10-13 19:37:18

谢谢大佬
页: [1]
查看完整版本: 大佬可以给小白解释一下python中回文数的代码含义吗