题目描述
给定n个十六进制正整数,输出它们对应的八进制数。
资源限制
内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
参考文献
为了将整数转换为二进制、八进制或十六进制的文本串,可以分别使用bin() ,oct() 或hex() 函数:
>>> x = 1234
>>> bin(x)
'0b10011010010'
>>> oct(x)
'0o2322'
>>> hex(x)
'0x4d2'
如果你不想输出0b , 0o 或者0x 的前缀的话,可以使用format() 函数
>>> format(x, 'b')
'10011010010'
>>> format(x, 'o')
'2322'
>>> format(x, 'x')
'4d2'
整数是有符号的,所以如果你在处理负数的话,输出结果会包含一个负号
>>> x = -1234
>>> format(x, 'b')
'-10011010010'
>>> format(x, 'x')
'-4d2'
如果你想产生一个无符号值,你需要增加一个指示最大位长度的值。比如为了显示32 位的值,可以像下面这样写:
>>> x = -1234
>>> format(2**32 + x, 'x')
'fffffb2e'
为了以不同的进制转换整数字符串,简单的使用带有进制的int() 函数即可
>>> int('4d2', 16)
1234
>>> int('0x4d2', 16)
1234
Python 代码
n = int(input())
for i in range(n):
x = input()
ans = format(int(x, 16), 'o')
print(ans)