题解:蓝桥云课 1230 进制转换
【题目来源】
蓝桥云课:1.进制转换 - 蓝桥云课 (lanqiao.cn)
【题目描述】
给定一个 \(N\) 进制数 \(S\),请你将它转换为 \(M\) 进制。
【输入】
第一行为一个整数 \(T\),表示测试数据数量。\((1≤T≤10^5)\)
每个测试用例包含两行,第一行包含两个整数 \(N,M\).
第二行输入一个字符串 \(S\),表示 \(N\) 进制数。
【输出】
输出共 \(T\),每行表示一组数据的答案。
【输入样例】
2
2 10
10101
11 2
1793A5068
【输出样例】
21
10101111001010100111010101011
【算法标签】
《蓝桥云课 1230 进制转换》 #模拟#
【代码详解】
import sys
input = sys.stdin.readline
int_to_char = "0123456789ABCDEF"
char_to_int = {}
for idx, chr in enumerate(int_to_char):
char_to_int[chr] = idx
# print(char_to_int)
def K_To_Ten(k, x):
#把k进制的数字x转换成10进制
#输入:k:int、x:str
#输出:ans:int
ans = 0
for char in x:
ans = ans*k + char_to_int[char]
return ans
def Ten_To_K(k, x):
#输入:十进制数字x:int,转成k:int进制
#输出:ans:str转换成k进制的答案
ans = ""
while x!=0:
ans += int_to_char[x%k]
x //= k
return ans[::-1]
# 任意的进制转换
T = int(input().strip()) # 删除input输入的前后空格
for _ in range(T):
N, M = map(int, input().split())
x = input().strip()
#N进制的x转成M进制
#1、N进制的x转成10进制的y
#2、10进制的y转成M进制的z
y = K_To_Ten(N, x)
z = Ten_To_K(M, y)
print(z)
【运行结果】
2
2 10
10101
21
11 2
1793A5068
10101111001010100111010101011
浙公网安备 33010602011771号