网站是什么,南阳市做网站,河南如何优化网站,好的国内网站建设公司欢迎大家订阅【蓝桥杯Python每日一练】 专栏#xff0c;开启你的 Python数据结构与算法 学习之旅#xff01; 文章目录 1 进制转换2 例题分析 1 进制转换
①任意制转为十进制 【示例】 ②十进制转为任意制 【法一】 【法二】
2 例题分析 题目地址#xff1a;https:/… 欢迎大家订阅【蓝桥杯Python每日一练】 专栏开启你的 Python数据结构与算法 学习之旅 文章目录 1 进制转换2 例题分析 1 进制转换
①任意制转为十进制 【示例】 ②十进制转为任意制 【法一】 【法二】
2 例题分析 题目地址https://www.lanqiao.cn/problems/1230/learning/
样例输入
2
2 10
10101
11 2
1793A5068样例输出
21
10101111001010100111010101011【示例代码】
# 定义字符集并构建字符到整数的映射
int_to_char 0123456789ABCDEF
char_to_int {chr: idx for idx, chr in enumerate(int_to_char)}# k进制字符串转换为十进制整数
# 输入k源进制x字符串
def K_To_Ten(k, x):ans 0x x[::-1] # 反转字符串以便从最低位开始计算for i in range(len(x)):ans char_to_int[x[i]] * k**i # 每位转换为十进制return ans# 十进制转换为任意 k 进制
# 输入k目标进制x十进制整数
def Ten_To_K(k, x):if x 0: # 处理特殊情况如果十进制数为0return 0ans while x ! 0:ans int_to_char[x % k] # 取余并转换为目标进制字符x // k # 向下取整除以移除当前最低位return ans[::-1] # 反转结果字符串以正确排列位序# 实现进制转换逻辑
T int(input()) # 读取测试用例数量
for _ in range(T):N, M map(int, input().split()) # 读取源进制和目标进制x input().strip() # 读取源进制数字串# 先将源进制数字串转换为十进制整数y K_To_Ten(N, x)# 将十进制整数转换为目标进制数字串z Ten_To_K(M, y)# 输出结果print(z)【代码分析】
①字符集定义和映射
int_to_char 0123456789ABCDEF
char_to_int {chr: idx for idx, chr in enumerate(int_to_char)}int_to_char: 包括所有可能出现在任意进制表示中的字符集合支持 0 到 15 进制数字。 例如0, 1, 2, 3, ... 9, A, B, C, D, E, F char_to_int: 字符到整数的映射字典。 0 映射为 01 映射为 1A 映射为 10B 映射为 11依此类推… 实现原理用 enumerate 生成索引与字符的映射。 for idx, chr in enumerate(int_to_char): char_to_int[chr] idx这一步操作将 char_to_int 构建为如下形式
{0: 0, 1: 1, 2: 2, 3: 3,4: 4, ...A: 10,B: 11,...F: 15
}该字典用于转换任意进制字符和整数之间的相互转换。
②从任意源进制字符串转换为十进制 定义 K_To_Ten 函数
def K_To_Ten(k, x):ans 0x x[::-1] # 反转字符串以便从最低位开始计算for i in range(len(x)):ans char_to_int[x[i]] * k**i # 每位转换为十进制return ansa. 参数
k: 源进制例如二进制为 ( k 2 )。x: 输入字符串例如二进制字符串 10101。
b. 流程解析
反转字符串 在进制转换中从右往左处理数字更简单。x[::-1] 实现字符串反转。 逐位转换 每位通过索引获取其整数值并计算其在十进制的值。公式char_to_int[x[i]] * k**i。 char_to_int[x[i]] 获取当前字符对应的整数值。k**i 表示当前位在十进制数中的权重。 返回结果ans 包括转换后的十进制结果。
③从十进制转换为任意目标进制字符串 定义 Ten_To_K 函数
def Ten_To_K(k, x):if x 0: # 处理特殊情况如果十进制数为0return 0ans while x ! 0:ans int_to_char[x % k] # 取余并转换为目标进制字符x // k # 向下取整除以移除当前最低位return ans[::-1] # 反转结果字符串以正确排列位序a. 参数
k: 目标进制例如十进制转换为二进制时 ( k 2 )。x: 十进制整数。
b. 流程解析
特殊情况处理如果十进制输入为 0直接返回 0。转换逻辑 每次通过 x % k 取当前位的余数。通过 x // k 逐步去除当前最低位。每位转换后用 int_to_char 转换为目标字符。 反转结果字符串因为转换从最低位开始需要将结果字符串反转。
④主逻辑
T int(input()) # 读取测试用例数量
for _ in range(T):N, M map(int, input().split()) # 读取源进制和目标进制x input().strip() # 读取源进制数字串y K_To_Ten(N, x) # 转换为十进制整数z Ten_To_K(M, y) # 转换为目标进制数字串print(z)首先读取测试用例的数量 T。对每个测试用例 读取源进制 N 和目标进制 M。读取源进制数字字符串 x。 调用函数依次转换 K_To_Ten(N, x) 将源进制转换成十进制整数。Ten_To_K(M, y) 将十进制转换为目标进制字符串。 输出转换结果。
【运行结果】