菜菜的刷题日记 | 蓝桥杯 — 十六进制转八进制(纯手撕版)附进制转换笔记

请添加图片描述

系列索引菜菜的刷题日记 | 被LeetCode用Python狂虐的那段日子

万万没想到啊,回老家过年断更的几天之后,我会因为无聊在除夕这天做了会儿题,然后写篇题解。

【题目】

在这里插入图片描述

题目链接:http://lx.lanqiao.cn/problem.page?gpid=T51

【我的代码】

我的思路是:首先十六进制二进制,然后再转八进制,这里直接创建两个字典用来存放数据。代码需要注意二进制是倒着匹配的,而且当不满三个数时需要补0,其他的大家应该都能看明白。

book1 = {
    '0': '0000',
    '1': '0001',
    '2': '0010',
    '3': '0011',
    '4': '0100',
    '5': '0101',
    '6': '0110',
    '7': '0111',
    '8': '1000',
    '9': '1001',
    'A': '1010',
    'B': '1011',
    'C': '1100',
    'D': '1101',
    'E': '1110',
    'F': '1111'
}
book2 = {
    '000': '0',
    '001': '1',
    '010': '2',
    '011': '3',
    '100': '4',
    '101': '5',
    '110': '6',
    '111': '7'
}

n = int(input())
sn = ['' for _ in range(n)]
for i in range(n):
    sn[i] = input()
    
for s in sn: #获取二进制形式数
    num = ''
    for j in s:
        num += book1[j]
        
    ss = ''
    t = ''
    count = 0
    for k in num[::-1]:
        t = k+t
        count += 1
        if count == 3: #三个数一组,当三个以后进行转换
            count = 0
            ss = book2[t] + ss
            t = ''
            
    if count == 1:#不够三个时两种情况,分别前方补0,注意不能写+=
        t = '00'+t
        ss = book2[t] + ss
    if count == 2:
        t = '0' + t
        ss = book2[t]+ss
    print(int(ss))

【进制转换笔记】

2进制8进制10进制16进制
2进制bin(int(n,8))bin(int(n,10))bin(int(n,16))
8进制oct(int(n,2))oct(int(n,10))oct(int(n,16))
10进制int(n,2)int(n,8)int(n,16)
16进制hex(int(n,2))hex(int(n,8))hex(int(n,10))

使用Python内置的函数进行进制转换,大家不难发现都是先转换成十进制再转换成对应的进制,我们简单举一个例子,其他的不再赘述:

# 8进制转16进制:8->10->16
n=input()
print(hex(int(n,8)))

输入:1010
输出:0x208

如果不想带前两位的标记,可使用如下方法:

  • 方法一:切片,将得到的结果从第三个字符开始取结果即可
# 10进制转换成2进制
n=int(input())
print(bin(n)[2:]) # 切片操作

输入:10
输出:12
  • 方法二:使用format函数进行格式化,format函数自带转换功能,yyds
n=input()
print("{:b}".format(int(n,8)))
# 先将8进制的数转换为10进制,
# 然后在format的槽中添加一个b,等价于实现了bin函数的功能
# 但是此结果是不带有0b前缀的

输入:1010
输出:1000001000

其他进制:(n右边的是原始进制)
print("{:o}".format(int(n,16))) # 其他类型转换为8进制
print("{:x}".format(int(n,8))) # 其他类型转换为16进制

【思考】

新年快乐!

Python力扣题解系列持续更新,欢迎点赞收藏关注

上一篇:菜菜的刷题日记 | 20.有效的括号(B站笔试题)
下一篇:菜菜的刷题日记 | 蓝桥杯 — 子串分值【第十一届】【省赛】【A组】

本人水平有限,文章中不足之处欢迎下方👇评论区批评指正~

如果感觉对你有帮助,点个赞👍 支持一下吧 ~

不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 🤝 我的博客 ,期待在这与你相遇 ~

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值