题解:蓝桥云课 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
posted @ 2026-03-04 10:50  团爸讲算法  阅读(1)  评论(0)    收藏  举报