重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1.先考虑将数据转化成二进制,然后在四位一组转化成十六进制
目前成都创新互联公司已为上千余家的企业提供了网站建设、域名、虚拟空间、成都网站托管、企业网站设计、肃南裕固族自治网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。map = {10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'}
n = int(input())
m=1#循环中是1,10,100,1000.。。不断乘十,代表了二进制不同位数(其实是用十进制表示二进制)
a=0
#表示最终结果,这里实际是用十进制数字保存二进制结果,方便后面转换成十六进制,考虑其实用列表保存也可以
while(n>0):
a += (n%2)*m
m*=10
n/=2
print(a)
首先代码尝试转化成二进制,出现如下错误:OverflowError: int too large to convert to float
查找原因:原因是n%2会产生一个float类型的数据,需要强制转换成Int,修改成如下代码就可以了。
map = {10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'}
n = int(input())
m=1
a=0
while(n>0):
a += int((n%2))*m
m*=10
n/=2
print(a)
2.从二进制转化成十六进制。写完之后发现了一些问题:
·n/m得到的是一个float类型的小数,也需要转化成int类型
·先转化成二进制表示再转化成十六进制其实是一种很愚蠢的办法,因为数据范围很大,有时候用二进制表示出来会超出范围
最终这种办法以失败告终,接下来尝试直接十进制转十六进制。
map = {10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'}
n = int(input())
m=1
a=0
while(n>0):
a += int((n%2))*m
m*=10
n/=2
#print(a)
s=''
b=a
f=1
while(f==1):
if(a>=10000):
b = int(a/10000)
a = int(a % 10000)
else:
b=a
f=0
num=0
num += int(b/1000)*8#取第四位乘以8
b=int(b%1000)
num+=int(b/100)*4#取第三位数乘以4
b = int(b%100)
num+=int(b/10)*2
b = int(b%10)
num+=b
b=0
if(num<=9):
s+=str(num)
else:
s+=map.get(num)
print(s)
3.十进制直接转十六进制
map = {10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'}
n = int(input())
s=''
while(n>0):
a = int(n%16)
n = int(n/16)
if (a<= 9):
s+=str(a)
else:
s+=map.get(a)
print(s[::-1])
最终这种方法只能拿到90分,说明还是有漏洞,但是目前没有找到
4.直接使用自带类型转换,这种方法可以拿到满分
map = {10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'}
n = int(input())
s = hex(n).replace("0x",'').upper()
print(s)
补充:1.十进制转换为二进制bin(int类型),八进制oct(int类型),十六进制hex(int类型)
其他进制转化成十进制int(str,原本的进制)
2.字符串替换replace函数:str.replace(old, new[, max])
3.小写转大写upper函数:str.upper(),大写转小写:str.lower()
类似的题目
11 基础练习十六进制转十进制
s = input()
print(int(s,16))
12 基础练习 十六进制转八进制
x = int(input())
for i in range(x):
s = input()
print(str(oct(int(s, 16))).replace('0o',''))
详细请看:蓝桥杯练习系统十进制转十六进制(python)
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧