当前位置: 首页 > news >正文

练9:进制转换

欢迎大家订阅【蓝桥杯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 "0"ans = ""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' 映射为 0
    • '1' 映射为 1
    • 'A' 映射为 10
    • 'B' 映射为 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 ans

a. 参数

  • 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 "0"ans = ""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)
  1. 首先读取测试用例的数量 T
  2. 对每个测试用例:
    • 读取源进制 N 和目标进制 M
    • 读取源进制数字字符串 x
  3. 调用函数依次转换:
    • K_To_Ten(N, x) 将源进制转换成十进制整数。
    • Ten_To_K(M, y) 将十进制转换为目标进制字符串。
  4. 输出转换结果。

【运行结果】
在这里插入图片描述

http://www.lryc.cn/news/501694.html

相关文章:

  • 善于运用指针--函数与指针
  • Microi吾码低代码平台:前端源码的本地运行探索
  • 十一、容器化 vs 虚拟化-Docker 使用
  • 实践项目2-自动计价电子秤
  • iOS如何操作更新推送证书
  • WSL2 在vscode无法连接copilot
  • HTA8998 实时音频跟踪的高效内置升压2x10W免电感立体声ABID类音频功放
  • 用ChatGPT-o1进行论文内容润色效果怎么样?
  • 《探索 Jetpack Compose:构建现代化 Android UI 的利器》
  • cocos creator 的 widget组件的使用及踩坑
  • Baumer工业相机的EMVA1288 数据报告简介
  • Docker 安装 中文版 GitLab
  • uni-app 个人课程表页面
  • FPGA工作原理、架构及底层资源
  • 【OpenCV】平滑图像
  • LeetCode300. 最长递增子序列(2024冬季每日一题 30)
  • vue H5如何实现copy功能
  • Golang使用etcd构建分布式锁案例
  • Windows 和 Ubuntu 双系统安装
  • 多媒体文件解复用(Demuxing)过程
  • 从 Zuul 迁移到 Spring Cloud Gateway:一步步实现服务网关的升级
  • qt之插件编译
  • pandas一行拆成多行
  • 今天调了个转速的小BUG
  • 第三节、电机定速转动【51单片机-TB6600驱动器-步进电机教程】
  • 从一个Bug谈前端响应拦截器的应用
  • JS进阶DAY4|节点操作
  • 【Web】2023安洵杯第六届网络安全挑战赛 WP
  • go 语言中协程和GMP模型
  • coco数据集转换SAM2格式