蓝桥杯基础练习题BASIC-12—十六进制转八进制(pyhton)

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

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

【注意】
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

【提示】
  先将十六进制数转换成二进制数,再由某进制数转换成八进制。

def trans_1(str1):
    """
    将十六进制转成二进制
    :param str1: 一个十六进制字符串
    :return:一个二进制字符串
    """
    alist = []
    for i in str1:
        if i == '0':
            alist.append("0000")
        elif i == "1":
            alist.append("0001")
        elif i == "2":
            alist.append("0010")
        elif i == "3":
            alist.append("0011")
        elif i == "4":
            alist.append("0100")
        elif i == "5":
            alist.append("0101")
        elif i == "6":
            alist.append("0110")
        elif i == "7":
            alist.append("0111")
        elif i == "8":
            alist.append("1000")
        elif i == "9":
            alist.append("1001")
        elif i == "A":
            alist.append("1010")
        elif i == "B":
            alist.append("1011")
        elif i == "C":
            alist.append("1100")
        elif i == "D":
            alist.append("1101")
        elif i == "E":
            alist.append("1110")
        else:
            alist.append("1111")
    m = "".join(alist)
    return m

def trans_2(str_2):
    """
    将二进制转为八进制
    :param str_2: 一个二进制字符串
    :return: 一个八进制字符串
    """
    alist = []
    if len(str_2) % 3 == 1:
        str_2 = "00" + str_2
    elif len(str_2) % 3 == 2:
        str_2 = "0" + str_2
    for i in range(2, len(str_2), 3):
        x = str_2[i-2] + str_2[i-1] + str_2[i]
        if x == "000":
            alist.append("0")
        elif x == "001":
            alist.append("1")
        elif x == "010":
            alist.append("2")
        elif x == "011":
            alist.append("3")
        elif x == "100":
            alist.append("4")
        elif x == "101":
            alist.append("5")
        elif x == "110":
            alist.append("6")
        else:
            alist.append("7")
    if alist[0] == '0':
        alist.pop(0)
    m = "".join(alist)
    return m

n = int(input())
alist = []
alist_1 = []
for i in range(n):
    x = input()
    alist.append(x)
for i in alist:
    m = trans_1(i)
    alist_1.append(m)
for i in alist_1:
    m = trans_2(i)
    print(m)
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会掉发的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值