这一题很简单就是把错误的信息转换成八进制,然后再用python的方法转十进制
【问题描述】
三月八日,小明买了台新车。但很快小明发现汽车的里程表有问题:里程表上每一位都不显示数字3和数字8,也就是说直接从数字2跳到数字4,直接从数字7跳到数字9。小明纳闷:这车到底行驶里程是多少。
现在,小明向你求助:根据里程表显示的数字,给出真实的行驶里程。
【输入形式】
输入有多组测试数据。
输入第一行正整数T,表示有多少组测试数据。
后面有T行,每行一个非负整数,表示里程表显示数字,里面不含有数字3和8。该数字不超过10位。
40%的测试数据组数T 10≤T≤ 102;
30%的测试数据组数T 102≤T≤ 103;
20%的测试数据组数T 103≤T≤ 104;
10%的测试数据组数T 104≤T≤ 105;
【输出形式】
对于每组测试数据,输出一个整数占一行:真实的行程里程。
【样例输入】
6 0 1 12 159 111224459 124567976
【样例输出】
0 1 10 103 19212007 21913077
【解题技巧】
这不就是一个八进制吗
答案如下
def trans(n):
a=""
for i in n:
if i=="4":
a+="3"
elif i=="5":
a+="4"
elif i=="6":
a+="5"
elif i =="7":
a+="6"
elif i=="9":
a+="7"
else:
a+=i
return a
n=int(input())
for i in range(n):
b=input()
c=trans(b)
print(int(c,8))
整体思路和开始是一样的,重要的还是学到的知识
学到的知识
一、十进制转换成二进制
方法一:bin()
bin()
bin(25)>>>>>>>>>’ob11001‘
#也可以利用replace函数除去前面的ob
bin(25).replace('ob','')>>>>>>>>>>>11001
方法二:'{:08b}'.format(a)
'{:08b}'.format(25)>>>>>>>>>00011001 #直接去掉ob并且高位补零
'{:8b}'.format(25)>>>>>>>>>>11001 #去掉ob高位不补零
二、十进制转换成八进制
oct()
oct(25)>>>>>>>>'0o31'
三、十进制转成十六进制
hex()
hex(25)>>>>>>>'0x19'
四、二进制、八进制、十六进制转化为十进制
int(n,2) int(n,8) int(n,16)
这个真的很方便
五、互相转换
先转十进制再转其他
只要会转十进制后面都OK啦