蓝桥 10 基础练习 十进制转十六进制 python

 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)

                 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值