前言
所謂回文數(shù),就是說一個(gè)數(shù)字從左邊讀和從右邊讀的結(jié)果是一模一樣的,比如12321。本文通過三個(gè)方法詳細(xì)介紹了判斷的方法,下面來一起看看吧
方法一:逐位判斷
原理: 用一個(gè)while循環(huán),將一個(gè)數(shù)每次都取出首位和末位,判斷是否相等,只要有一次不相等退出即可。
回文數(shù)的判斷條件:加入一個(gè)變量位數(shù),如果這個(gè)數(shù)是奇數(shù),位數(shù)為1時(shí),即最中間那一位數(shù),此時(shí)退出即可,同理,偶數(shù),位數(shù)為0時(shí),退出。
問題:
優(yōu)點(diǎn): 思路簡(jiǎn)單
解決:
判斷位數(shù)下面程序即可
y=x
weishu=0
while x:
weishu+=1
x=x//10
先將判斷的x賦值給y,當(dāng)x不為0時(shí),表明現(xiàn)在x還有位數(shù),位數(shù)+1,x/10減少一位,但要記住,用地板除(//)直接得到int整數(shù),否則用/會(huì)出現(xiàn)浮點(diǎn)數(shù)
逐位取值:
a=y//(10**(weishu-1))
b=y%10
if a!=b:
print("不是回文數(shù)。")
break
weishu-=2
y=y//10
y=y%(10**weishu)
取得首位只要地板除以相應(yīng)的位數(shù),把首位后面的數(shù)舍去,比如一個(gè)五位數(shù),地板除10000(10的4次方,所以是位數(shù)-1),就會(huì)得到首位,末尾比較簡(jiǎn)單,只要對(duì)10取模得到余數(shù)就是各位,a是首位,b是末位。
判斷首尾相等后,先將位數(shù)-2,然后將首尾的數(shù)字都給刪掉,刪掉末位//10即可,刪掉首位:如果是五位數(shù),現(xiàn)在刪掉末位后是四位數(shù),地板與1000取模即可
然后是判斷如何判斷退出循環(huán)
如上文,判斷位數(shù)最后的值即可
最后判斷負(fù)數(shù)和個(gè)位數(shù)即可
實(shí)現(xiàn)代碼如下:
x=int(input("請(qǐng)輸入一個(gè)整數(shù):"))
if x0:
print("不是回文數(shù)。")
elif not x//10:
print("是回文數(shù)。")
else:
y=x
weishu=0
while x:
weishu+=1
x=x//10
while True:
a=y//(10**(weishu-1))
b=y%10
if a!=b:
print("不是回文數(shù)。")
break
weishu-=2
if weishu==1:
print("是回文數(shù)。")
break
if not weishu:
print("是回文數(shù)。")
break
y=y//10
y=y%(10**weishu)
方法二:得到顛倒后的數(shù)判斷
原理: 每一個(gè)回文數(shù)從中間切開前后都是相等的,所以得到一個(gè)回文數(shù)后面的數(shù)與前面的數(shù)比較即可
那么問題來了,如果是奇位數(shù),怎么判斷?
解決: 只要最后得到的前面的數(shù)或者后面的數(shù)除去末位數(shù)與另一個(gè)相等即可,因?yàn)槠嫖粩?shù)中間的數(shù)不用管,其他的數(shù)相等就可以,所以刪去末位判斷是否相等
難點(diǎn): 如何得到后面的數(shù)?
每次將后面的數(shù)乘上10,然后加上前面數(shù)的末位,前面的數(shù)地板除10消除末位即可
如何判斷后面的數(shù)已經(jīng)取好了,即退出循環(huán)的判斷條件是:
就是當(dāng)后面的數(shù)已經(jīng)大于等于前面的數(shù)就可以退出循環(huán)了
優(yōu)點(diǎn): 代碼簡(jiǎn)單
實(shí)現(xiàn)程序如下:
hou=0
while(x>hou):
hou=hou*10+x%10
x//=10
if x==hou or x==(hou//10):
print("是回文數(shù)。")
else:
print("不是回文數(shù)。")
最后判斷負(fù)數(shù)和末位是0但不是0的數(shù),他們一定不是回文數(shù),因?yàn)殚_頭不能是0
個(gè)位數(shù)此程序能夠判斷,后面的數(shù)就是此個(gè)位數(shù),地板除10之后和前面一樣都是10,即回文數(shù)
最終程序:
x=int(input("請(qǐng)輸入一個(gè)整數(shù):"))
if x0 or(x%10==0 and x!=0):
print("不是回文數(shù)。")
elif not x//10:
print("不是回文數(shù)。")
else:
hou=0
while(x>hou):
hou=hou*10+x%10
x//=10
if x==hou or x==(hou//10):
print("是回文數(shù)。")
else:
print("不是回文數(shù)。")
方法三:字符串處理
原理: 字符串其實(shí)是序列,我們只要將字符串倒過來判斷是否和原字符串相等就可以了
反轉(zhuǎn)可以用x[::-1]
實(shí)現(xiàn)代碼如下
x=input("請(qǐng)輸入一個(gè)整數(shù):")
if x==x[::-1]:
print("是回文數(shù)。")
else:
print("不是回文數(shù)。")
要是你說還能不能更高級(jí)一點(diǎn),還可以用條件表達(dá)式這樣寫
x=input("請(qǐng)輸入一個(gè)整數(shù):")
print("是回文數(shù)。") if x==x[::-1] else print("不是回文數(shù)。")
但是如果他給你一個(gè)09890也會(huì)報(bào)錯(cuò),具體解決可以先轉(zhuǎn)化為int,再轉(zhuǎn)化為str
最終成品:
x=int(input("請(qǐng)輸入一個(gè)正整數(shù):"))
x=str(x)
print("是回文數(shù)。") if x==x[::-1] else print("不是回文數(shù)。")
總結(jié)
到此這篇關(guān)于利用Python判斷整數(shù)是否是回文數(shù)的3種方法總結(jié)的文章就介紹到這了,更多相關(guān)Python判斷整數(shù)是回文數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python實(shí)現(xiàn)判斷一個(gè)整數(shù)是否為回文數(shù)算法示例
- Python3實(shí)現(xiàn)的回文數(shù)判斷及羅馬數(shù)字轉(zhuǎn)整數(shù)算法示例