Python入门习题----进制转换

【问题描述】编写一个程序:将输入的一个N进制整数转换成M进制数(N和M在2到16进制之间),
                     要求:N进制数和M进制数均以字符串方式存储。
【输入形式】输入的第一行、第二行分别表示N和M的值,第三行表示需要转换的数值k。
【输出形式】输出的一行为k转换后的结果(超过10的数值依次用大写字母ABCDEF表示,A表示11, B表示12,依次类推),

                     若输入的进制数值不合法(如:N和M没有落在2到16之间,

                      或数据含有指定进制的非法字符(如:N=2时,k为12)),输出"illegal input"。
【样例输入】
2
16
11000011
【样例输出】
C3


参考代码:


"""
Created on Tue Oct 30 20:18:17 2018

@author: Dina
"""

n = int(input())
m = int(input())
num = list(input())
d={
   0:'0',
   1:'1',
   2:'2',
   3:'3',
   4:'4',
   5:'5',
   6:'6',
   7:'7',
   8:'8',
   9:'9',
   10:'A',
   11:'B',
   12:'C',
   13:'D',
   14:'E',
   15:'F' 
   }

flg = 0

# 若输入的进制数值不合法,把 flg 赋值为 1
if n<2 or n>16 or m<2 or m>16 :
    flg = 1

temp = 0  
# 先 把 n 进制的数转换为 10 进制的
for i in range(len(num)-1,-1,-1):                   
        for j in range(16):                           
            if d[j] == num[i]:
                # 若数据含有指定进制的非法字符(如:N=2时,k为12))把 flg 赋值为 1就跳出循环
                if j >= n:
                    flg=1
                    break
                else:
                    break                  
        temp += j * n**(len(num)-i -1)
if flg == 1 :
    print('illegal input')
else:
    li = []    
    #转换为 m 进制的数
    while(temp != 0):        
        t1 = temp%m
        temp = temp//m       
        li.append(t1)

    #输出转换后的数值
    for i in range(len(li)-1,-1,-1):
        print(d[li[i]],end='')

提交可通过:

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值