首页 > 试题广场 >

数制转换

[编程题]数制转换
  • 热度指数:12796 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
    求任意两个不同进制非负整数的转换(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)。
示例1

输入

15 Aab3 7

输出

210306
while True:
    try:
        baseChar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        numInput = input().split()
        a = int(numInput[0])
        b = int(numInput[2])
        base10 = 0
        temp = numInput[1].upper()
        index = 0
        while temp:               #先转成10进制
            base10 += baseChar.index(temp[-1])*a**index
            index += 1
            temp = temp[:-1]
        result = [] 
        while base10 > 0:         #再转成b进制
            base10, index = divmod(base10, b)
            result.append(baseChar[index])
        print("".join(result[::-1]))
    except Exception:
        break
编辑于 2018-10-03 00:10:52 回复(0)

python3十行解法。


def baseN(num, b):
    return ((num == 0) and "0") or (baseN(num // b, b).lstrip("0") + "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ"[num % b])

while True:
    try:
        a,b,c=input().split()
        val=int(b,int(a))
        print(baseN(val,int(c)))
    except:
        break

通过测试。

发表于 2017-10-16 16:28:55 回复(1)
voc=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
def f(n,b):
    t=[]
    while n != 0:
        t.append(voc[n%b])
        n = n//b
    return ''.join(t)[::-1]
while 1:
    try:
        s=input().split()
        a,b=int(s[0]),int(s[2])
        n=int(s[1],a)
        print(f(n,b))
    except:
        break

发表于 2017-09-05 10:07:16 回复(0)

问题信息

难度:
3条回答 9800浏览

热门推荐

通过挑战的用户

查看代码