|
发表于 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 取余实现取最后一位的效果 |
|