资源限制
时间限制: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)