【问题描述】编写一个程序:将输入的一个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='')
提交可通过: