1. 程式人生 > 實用技巧 >關於Python|進位制轉換問題

關於Python|進位制轉換問題

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理

以下文章來源於騰訊雲,作者:演算法與程式設計之美。

問題描述

給定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