系列索引:菜菜的刷题日记 | 被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组】
本人水平有限,文章中不足之处欢迎下方👇评论区批评指正~如果感觉对你有帮助,点个赞👍 支持一下吧 ~
不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 🤝 我的博客 ,期待在这与你相遇 ~