MOOC数据结构python练习题--第五章-例一

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))

解答思路

  1. string 不能直接除base,
  2. 转化成纯int再除base–M(>10)进制转化成10进制
  3. 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的时候,还是不太会用递归的思维,用了循环,求大佬解答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值