Python|进制转换问题

简介: Python|进制转换问题

问题描述

给定n个十六进制正整数,输出它们对应的八进制数。

1 输入格式

输入的第一行为一个正整数n (1<=n<=10)。

接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000

2 输出格式

输出n行,每行为输入对应的八进制正整数。

【注意】

输入的十六进制数不会有前导0,比如012A

输出的八进制数也不能有前导0。

3 样例输入

2

39

123ABC

4 样例输出

71

4435274


解决方案

在直接进制转换较难时,可以找个“中间值”。即十八进制——十进制——八进制

示例代码

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 R^3R^2 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

进制转换规律很简单,但很多人不知道,且实际操作很容易出错。




目录
相关文章
|
3月前
|
Python
Python中的进制转换
Python中的进制转换
38 0
|
4月前
|
Python
Python中的进制转换
Python中的进制转换
22 0
|
8月前
|
Python
进制转换Python - 蓝易云
注意,这些函数返回的字符串表示的数值包含了表示数值类型的前缀('0b','0o',或'0x')。如果你想去掉这些前缀,可以使用字符串切片
66 0
|
Python
Python进制转换
Python进制转换
64 0
|
Python
【python】bin/dec/hex/bnr以及浮点数进制转换器GUI
【python】bin/dec/hex/bnr以及浮点数进制转换器GUI
112 0
|
Python
【python】bin/dec/hex/bnr进制转换函数及fp32转十六进制
【python】bin/dec/hex/bnr进制转换函数及fp32转十六进制
136 0
|
Python
Python|进制转换
Python|进制转换
84 0
|
数据挖掘 Python
python中进制转换任意玩儿
python中进制转换任意玩儿
115 0
|
前端开发 芯片 Python
【python】bin/dec/hex/bnr以及浮点数进制转换器GUI
【python】bin/dec/hex/bnr以及浮点数进制转换器GUI
135 0
【python】bin/dec/hex/bnr以及浮点数进制转换器GUI
下一篇
开通oss服务