01:数制转换python

01:数制转换python

问题描述:

01:数制转换
查看提交统计提问
总时间限制: 1000ms 内存限制: 65536kB
描述
求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,.,9,a,b,.,f)或者(0,1,.,9,A,B,.,F)。

输入
输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。
a,b是十进制整数,2 =< a,b <= 16。
输出
输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,.,9,A,B,.,F)。
样例输入
15 Aab3 7
样例输出
210306

思路,现将n进制转换为10进制,随后将其转换为b进制数,有帮助请采纳,谢谢

def convert10_n(n, base):
    _ = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 'A', 'B', "C", "D", "E", "F"]
    d = _[n % base]
    mark = n // base
    if mark > 0:
        return convert10_n(mark, base) + d
    else:
        return d
def a_n_b(a,n,b):
    return int(convert10_n(int(n,a),b))
print(a_n_b(15 ,'Aab3', 7))

img


chars = '0123456789ABCDEF'

def 进制转化(a,n,b):
    f = int(a)
    t = int(b)
    x = list(str(n).upper())
    s = 0
    for i in range(len(x),0,-1):
        s += chars.index(x[len(x)-i])*f**(i-1)
    r = ''
    while s>0:
        r = chars[s%t] + r
        s = s//t
    return r

a,n,b = input().split()
print(进制转化(a,n,b))

img

img