练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 = 0
    x = 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:  # 处理特殊情况,如果十进制数为0
        return "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 = 0
    x = 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:  # 处理特殊情况,如果十进制数为0
        return "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. 输出转换结果。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934789.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ComfyUI+多视图生成】MV-Adapter:多视图一致性图片生成(2024.12.09基于SDXL开源)

源码:https://github.com/huanngzh/MV-Adapter ComfyUI扩展:https://github.com/huanngzh/ComfyUI-MVAdapter 项目主页:https://huanngzh.github.io/MV-Adapter-Page/ 论文:2412.MV-Adapter: Multi-view Consistent Image Generat…

《机器学习》2.4假设检验 t分布 F分布

目录 t发布 注意是这个东西服从t分布 数据服从t分布通常是在以下情况下: 以下是一些具体的例子,说明在何种情况下数据会服从t分布: t检验 交叉验证t检验 样本方差​编辑 F分布(fisher Friedman检验是一种非参数统计方法&a…

图像识别 | Matlab基于卷积神经网络(CNN)的宝可梦识别源程序,GUI界面。附详细的运行说明。

图像识别 | Matlab基于卷积神经网络(CNN)的宝可梦识别源程序,GUI界面。附详细的运行说明。 目录 图像识别 | Matlab基于卷积神经网络(CNN)的宝可梦识别源程序,GUI界面。附详细的运行说明。预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基…

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之计数器与累加器(一)

学习背景: 在现实生活中一些需要计数的场景下我们会用到计数器,如空姐手里记录乘客的计数器,跳绳手柄上的计数器等。累加器是累加器求和,以得到最后的结果。计数器和累加器它们虽然是基础知识,但是应用广泛&#xff0…

计算机毕业设计Python动物图像识别分类系统 机器学习 深度学习 数据可视化 爬虫 卷积神经网络CNN 预测算法 图像识别

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

ASP.NET Core API + MySql

环境 数据库: mysql8.0 后端: vs2022 ASP.NET Core API .net 8 前端: Hbuilderx bootstrap 5.3.0 jquery v3.7.1 bootstrap-table 1.23.5 创建项目 添加资源包 AutoMapper Microsoft.EntityFrameworkCore.Tools 8.0.0 Pomelo.EntityFramew…

vmware vsphere5---部署vCSA(VMware vCenter Server)附带第二阶段安装报错解决方案

声明 因为这份文档我是边做边写的,遇到问题重新装了好几次所以IP会很乱 ESXI主机为192.168.20.10 VCSA为192.168.20.7,后台为192.168.20.7:5480 后期请自行对应,后面的192.168.20.57请对应192.168.20.7,或根据自己的来 第一阶段…

【QT】:QT(介绍、下载安装、认识 QT Creator)

背景 🚀 在我们的互联网中的核心岗位主要有以下几种 开发(程序员)测试运维(管理机器)产品经理(非技术岗位,提出需求) 而我们这里主要关注的是开发方向,开发岗位又分很…

STM32 出租车计价器系统设计(一) 江科大源码改写

STM32 出租车计价器系统设计 功能目标 驱动步进电机模拟车轮旋转,并实现调速功能。 设置车轮周长和单价,检测车轮转速和运转时间。 计算并显示行驶里程和价格。 硬件材料 28BYJ48 五线四相步进电机和 ULN2003 驱动板模块 测速传感器模块 嵌入式小系统…

Datawhale AI冬令营(第一期)--零基础定制你的专属大模型

本文主要简述如何快速完成和一些小细节 第一步下载嬛嬛数据集 数据来源:self-llm/dataset/huanhuan.json at master datawhalechina/self-llm GitHub 注意:1.一定是数据集下载完成一定是.json结尾的 2.这个是github的网址,可能会遇到打不开的情况 …

Android 车载虚拟化底层技术-Kernel 5.10 -Android12(multi-cards)技术实现

详细代码实现见 Android Display Graphics系列文章-汇总​​​​​​Android Display Graphics系列文章-汇总 Android Display Graphics系列文章-汇总 Android Display Graphics系列文章-汇总 本文主要包括部分: 一、Android12的Kernel 5.10版本 1.1 Kernel 5…

qemu安装arm64架构银河麒麟

qemu虚拟化软件,可以在一个平台上模拟另一个硬件平台,可以支持多种处理器架构。 一、安装 安装教程:https://blog.csdn.net/qq_36035382/article/details/125308044 下载链接:https://qemu.weilnetz.de/w64/2024/ 我下载的是 …

前端入门之VUE--vue组件化编程

前言 VUE是前端用的最多的框架;这篇文章是本人大一上学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。 文章目录 2、Vue组件化编程2.1、组件2.2、基本使用2.2.1、VueComponent 2、Vue组件化编程 2.1、组件 组件:用来实现…

day08 接口测试(3)——postman工具使用

下载 postman 的历史版本:Postman 历史版本下载 - 简书 我自己根据我的电脑,安装的地址为:https://dl.pstmn.io/download/version/9.31.32/osx_64 今天开始学习 postman 这个测试工具啦。 【没有所谓的运气🍬,只有绝…

C++游戏开发探秘【3】

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C游戏开发的相关内容! …

python基础:(七)类

目录 一.创建和使用类二.使用类和实例2.1给属性指定默认值2.2修改属性的值2.2.1直接修改属性的值2.2.2通过方法修改属性的值2.2.3通过方法对属性的值进行递增 三.继承3.1子类的方法__init__()3.2给子类定义属性和方法3.3重写父类的方法 四.导入类4.1语法--1:4.2语法--2 前言 p…

TortoiseGit的下载、安装和配置

一、TortoiseGit的简介 tortoiseGit是一个开放的git版本控制系统的源客户端,支持Winxp/vista/win7.该软件功能和git一样 不同的是:git是命令行操作模式,tortoiseGit界面化操作模式,不用记git相关命令就可以直接操作,读…

Avalonia实战实例一:使用Prism创建项目,并创建窗口

文章目录 一、安装Avalonia的项目模板二、安装Prism框架三、简单更改App.axaml为Prism基类四、创建窗口一、安装Avalonia的项目模板 这里安装的是Avalonia 11.2.1,.Net 6.0 安装完成,创建Avalonia项目。 二、安装Prism框架 打开Nuget,搜索Prism: 不要安装Prism.Core: …

【Spark】Spark的两种核心Shuffle工作原理详解

Spark 的shuffle机制 一、Spark ShuffleManager 发展历程 Spark 1.1.0 之前 在 Spark 1.1.0 之前,Spark 使用 BlockStoreShuffleFetcher 来处理 Shuffle 操作。这个实现主要依赖于直接从 BlockManager 获取 Shuffle 数据,并通过网络进行交换。 Spark …

Y3编辑器文档4:触发器1(对话、装备、特效、行为树、排行榜、不同步问题)

文章目录 一、触发器简介1.1 触发器界面1.2 ECA语句编辑及快捷键1.3 参数设置1.4 变量设置1.5 实体触发器1.6 函数库与触发器复用 二、触发器的多层结构2.1 子触发器(在游戏内对新的事件进行注册)2.2 触发器变量作用域2.3 复合条件2.4 循环2.5 计时器2.6…