蓝桥杯python 基础练习12 十六进制转八进制

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

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

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

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

样例输入
  2
  39
  123ABC
样例输出
  71
  4435274

方法1

思路:1.由于同时输入好几个数,所以准备两个列表,一个存放16进制的数,另一个存放8进制的数。
2.对存放16进制的列表一一遍历,先把数字转化为10进制,然后再转换为8进制,然后存放到另一个列表中。
3.对存放8进制的列表一一遍历,将其输出。
while True:
    try:
        n = int(input())
        q = 1
        B = []
        while q<=n:
            num = input()
            B.append(num)
            q = q+1

        for z in B:
            sum = 0
            j = 1

            for i in z:
                if i <= str(9):
                    num = i
                elif i == 'A':
                    num = 10
                elif i == 'B':
                    num = 11
                elif i == 'C':
                    num = 12
                elif i == 'D':
                    num = 13
                elif i == 'E':
                    num = 14
                elif i == 'F':
                    num = 15

                sum = sum + int(num)*(16**(len(z)-j))
                j = j+1

            A = []
            if sum== 0:
                print(0)

            while sum != 0:
                k = sum%8
                A.append(k)
                sum = sum // 8

            A.reverse()

            for l in A:
                print(l,end='')

            print()
    except:
        break

方法2

思路:大体方法和上面一直,只不过16进制转换10进制的时候用的是ord()函数
while True:
    try:
        n=int(input())
        a = [[] for i in range(n)]
        b = [[] for i in range(n)]

        for i in range(n):
            a[i]=input()

        for i in range(n):
            s,m=0,0
            for j in range(len(a[i])):
                if a[i][j].isdigit():
                    s=s+(ord(a[i][j])-ord('0'))*pow(16,len(a[i])-j-1)
                elif a[i][j].isalpha():
                    s=s+(ord(a[i][j])-ord('A')+10)*pow(16,len(a[i])-j-1)
            while s:
                m=s%8
                b[i].append(m)
                s=int(s/8)

        for i in range(n):
            for j in range(len(b[i])):
                print(b[i][len(b[i])-j-1],end="")
            print()
    except:
        break

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值