關於Python|進位制轉換問題
阿新 • • 發佈:2020-11-06
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理
以下文章來源於騰訊雲,作者:演算法與程式設計之美。
問題描述
給定n個十六進位制正整數,輸出它們對應的八進位制數。
1 輸入格式
輸入的第一行為一個正整數n (1<=n<=10)。
接下來n行,每行一個由09、大寫字母AF組成的字串,表示要轉換的十六進位制正整數,每個十六進位制數長度不超過100000。
2 輸出格式
輸出n行,每行為輸入對應的八進位制正整數。
【注意】
輸入的十六進位制數不會有前導0,比如012A。
輸出的八進位制數也不能有前導0。
3 樣例輸入
2
39
123ABC
4 樣例輸出
71
4435274
解決方案
在直接進位制轉換較難時,可以找個“中間值”。即十八進位制——十進位制——八進位制
示例程式碼
```python def jz(x): s=0 a={'A':10,'B':11,'C':12,'D':13,'E':14,'F':15} x=str(x)[::-1] for i in range(len(str(x))):#轉化10進位制 if x[i] in a: s+=a[x[i]]*16**i else: s+=int(x[i])*16**i h='' while s>=1:#轉化2進位制 h+=str(s%2) s=s//2 s=h#2進位制 if len(s)%3==0: pass else: s+='0'*(3-len(s)%3) p='' for i in range(0,len(s),3):#轉化8進位制(從右到左3個為一組) k=s[i:i+3][::-1] t=int(k[0])*2**2+int(k[1])*2**1+int(k[2])*2**0 p+=str(t) return int(p[::-1]) n=int(input()) for i in range(n): g=input() print(jz(g))
結語
十進位制中的數位排列是這樣的…… 萬 千 百 十 個 十分 百分 千分……
R進制中的數位排列是這樣的……R^4 R3R2 R^1 R^0 R^-1 R^-2 R^-3……
規律:相鄰的數位間相差該進位制的一次方。
例如:
十進位制的123=1×100+2×10+3×1
十進位制的9876=9×1000+8×100+7×10+6×1
進位制轉換規律很簡單,但很多人不知道,且實際操作很容易出錯。
END