MOOC数据结构python练习题--第五章-例一
程序员文章站
2022-04-02 23:03:51
...
1.题目内容: 给定一个M进制的数,请将其转换为N进制并输出
输入格式: 两行,第一行为空格分隔的两个数字,分别为10进制表示的M与N;其中M, N均满足2 ≤ M、N ≤ 36 第二行为待转换的数字,其中每位超过9的部分从10至36分别用大写字母A-Z表示;输入数据保证其中最大位数对应数字不超过M
输出格式: 一行字符串,表示转换后的N进制数
输入样例: 8 16 473
输出样例: 13B
#相关课堂例题:
def toStr(n,base):
convertString='0123456789ABCDEF'
if n<base:
return convertString[n]
else:
return toStr(n//base,base)+convertString[n%base]
print(toStr(1453,16))
解答思路
- string 不能直接除base,
- 转化成纯int再除base–M(>10)进制转化成10进制
- 10再转化成N进制
方法:
1.构建字典
A=10 B=11 C=12
'''
构建字典法
'''
#构建字典
convertString='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
dic10={}
for i in range(len(convertString)):
dic={}.fromkeys((convertString[i]), i)
dic10=dict(dic10,**dic)
#转化成10进制
def to10(NUM,M):
result=0
for i in range(len(NUM)):#第一位不需要
t=dic10[NUM[-(i+1)]]*(M**i)#注意逆序
result=result+t
return result
#化成N进制
def toStr(numNew,N):
if numNew < N:
return convertString[numNew]
else:
return toStr(numNew//N,N) + convertString[numNew%N]
M,N = map(int,input().split(" "))
NUM = input()
numNew = to10(NUM,M)
print(toStr(numNew,N))
有一个不太对,然后to_10的时候,还是不太会用递归的思维,用了循环,求大佬解答