【Python】判断一个整数是否是回文数的三种方法 | 您所在的位置:网站首页 › python奇数偶数判断方法 › 【Python】判断一个整数是否是回文数的三种方法 |
方法一:逐位判断
原理: 用一个while循环,将一个数每次都取出首位和末位,判断是否相等,只要有一次不相等退出即可。 回文数的判断条件:加入一个变量保存现在剩余的位数,每次取这个数的首位跟末位判断,如果相等那么去掉这个数的首位跟末位。最后如果剩余1位,即最中间那一位数,表明之前我们所有判断首位跟末位都是相等的(如果不相等那么直接判断不是回文数退出)表明这个数是回文数,退出。同理,如果判断位数为偶数,剩余的位数为0时,退出。 问题: 如何判断位数如何逐位取值优点: 思路简单 解决: 判断位数下面程序即可 y=x weishu=0 while x: weishu+=1 x=x//10先将判断的x赋值给y,当x不为0时,表明现在x还有位数,位数+1,x/10减少一位,但要记住,用地板除(//)直接得到int整数,否则用/会出现浮点数(地板除//其实就类似C++中的int除法会去掉小数位,举例3//2=1,因为小数位的0.5被舍掉了) 逐位取值: a=y//(10**(weishu-1)) b=y%10 if a!=b: print("不是回文数。") break weishu-=2 y=y//10 y=y%(10**weishu)取得首位只需要地板除以相应的位数,把首位后面的数舍去,比如一个五位数,地板除10000(10的4次方,所以是位数-1),就会得到首位(举例23456//10000=2,小数位的0.3456由于是地板除约掉),末位比较简单,只要对10取模得到余数就是个位,a是首位,b是末位。 判断首尾相等后,先将位数-2,然后将首尾的数字都给删掉,删掉末位//10即可,删掉首位:如果是五位数,现在删掉末位后是四位数,地板与1000取模即可(举例,23456,我们首先地板除10,结果就是2345,然后我们再对1000取模2345%1000=345,刚好去掉了首位) 然后是判断如何判断退出循环 如上文,判断位数最后的值(位数最后是1或者0退出)即可 最后判断负数和个位数即可 实现代码如下: x=int(input("请输入一个整数:")) if xhou): hou=hou*10+x%10 x//=10 if x==hou or x==(hou//10): print("是回文数。") else: print("不是回文数。")最后判断负数和末位是0但不是0的数,他们一定不是回文数,因为开头不能是0 个位数此程序能够判断,后面的数就是此个位数,地板除10之后和前面一样都是10,即回文数 最终程序: x = int(input("请输入一个整数:")) if x hou): hou = hou * 10 + x % 10 x //= 10 if x == hou or x == (hou // 10): print("是回文数。") else: print("不是回文数。") 方法三:字符串处理原理: 字符串其实是序列,我们只要将字符串倒过来判断是否和原字符串相等就可以了 反转可以用x[::-1](不明白的可以去搜索python列表切片) 实现代码如下 x=input("请输入一个整数:") if x==x[::-1]: print("是回文数。") else: print("不是回文数。")要是你说还能不能更高级一点,还可以用条件表达式这样写 x=input("请输入一个整数:") print("是回文数。") if x==x[::-1] else print("不是回文数。")但是如果他给你一个09890也会报错,具体解决可以先转化为int,再转化为str 最终成品: x=int(input("请输入一个正整数:")) x=str(x) print("是回文数。") if x==x[::-1] else print("不是回文数。") |
CopyRight 2018-2019 实验室设备网 版权所有 |