BASIC-10 十进制转十六进制
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
输出这个整数的16进制表示(大写)
样例输入
30
样例输出
1E
解决思路1:利用python内置的进制转换函数
python内置进制转换函数
十进制转二进制:bin(x)
十进制转八进制:oct(x)
十进制转十六进制:hex(x)
二进制转十进制:int(x, 2)
二进制转八进制:int(x, 8)
二进制转十六进制:int(x, 16)
num = int(input())
print(str(hex(num))[2:].upper())
解决思路2:循环求余构造十六进制数
假设整数x可表示为3位的16进制数$h_2 h_1 h_0$,则 $x=h_2*16^2 + h_1*16^1 + h_0*16^0$。通过循环除16的方式,每次循环将高位向低位移动,即从个位开始逐个求解$h_i$。
num = int(input())
if num==0:
print(0)
else:
s = []
while num:
m, num = num%16, int(num/16)
if m >= 10:
s.append(chr(m+55))
else:
s.append(m)
for i in range(len(s)):
print(s[len(s)-i-1],end='')
BASIC-11 十六进制转十进制
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
解决思路1:使用python 内置进制转换函数
num = str(input())
print(int(num, 16))
解决思路2:循环构造十进制数
num = str(input())
ans = 0
counter = len(num)-1
while len(num):
c = num[0]
num = num[1:]
if ord(c) >= 65:
ans += (ord(c)-55) * pow(16, counter)
else:
ans += int(c) * pow(16, counter)
counter -= 1
print(ans)
BASIC-12 十六进制转八进制
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】先将十六进制数转换成某进制数,再由某进制数转换成八进制。
十六进制转八进制有两种方法:
1. 十六进制转二进制,二进制转八进制:1位十六进制对应4位二进制,3位二进制对应1位8进制
2. 十六进制转十进制,十进制转八进制
解决:使用python 内置进制转换函数
n = int(input())
for i in range(n):
num = str(input())
num_i = int(num, 16)
print('{:x}'.format(num_i))
# res_2=oct(res_1)
# print(res_2[2:])