qy_蓝桥杯编程系列_编程18 进制转换

news/2025/12/3 20:29:00/文章来源:https://www.cnblogs.com/isbabydoll/p/19303748

编程18 进制转换

这题初看有点复杂,但只要理解进制转换的原理,加上一点字符串运用方法,就可以很顺畅的解决啦

一、题目简介

image
如图所示为本题要求,需要将一个N进制的数S转换成M进制,一共T个测试数据。

二、重点解析

2.1 进制转换

本题解题的核心就是理解进制转换的原理,由题意可知,N和M可为2~16的任意数字,也就是说不拘泥于我们学过的二进制、八进制和十六进制等。直接转换看似最简单,但一来大部分人并不清楚非常用进制间的直接转换,二来N和M的取值是任意的毫无规律可言,基本无法直接转换。
这个时候很容易想到在N进制和M进制之间设置一个中转点,即我们最熟悉的十进制。因为相比于任意进制间的转换,大部分人一定更熟悉任意进制转换为十进制,以及十进制转换为任意进制。
(1)任意进制N数num转换为十进制,其中数S为$$a_na_{n-1}...a_2a_1a_0$$
则转换为十进制后为

\[十进制数=a_0 * N^0 + a_1 *N^1+a_2*N^2+...a_n*N^n \]

需注意的是10-15分别用A,B,C,D,E,F表示,需在超过十进制的进制中将数字转换成字母,反之计算时将字母转换成数字。
以二进制转十进制为例
二进制数10110,转为十进制的公式为 0 * 2^0 + 1 * 2^1 + 1 * 2^2 + 0 * 2^3 + 1 * 2^4 = 14,二进制数一共5位,从右往左2的0次方到4次方分别乘以对应二进制上位数相加,得到十进制数,其他进制同理。
(2)十进制数num转换为任意进制数,其核心原理为“除M取余,逆序排列
具体操作步骤为:

  • num除以M得到商和余数
  • 将商作为新一轮的十进制数,重复步骤1,直至商为0
  • 余数是M进制上的数,得到的所有余数按得到顺序排列再逆序就是M进制数
  • 若余数为10-15转换为字母

公式辅助记忆
设转换后的数字为$$b_kb_{k-1}...b_2b_1b_0$$
则$$ num = b_k * M^k + b_{k-1} * M^{k-1}...b_2 * M^2 + b_1 * M^1+b_0 * M^0 $$

以十进制转二进制为例
十进制数22转换为二进制:

  • 22 / 2 = 11 ……0
  • 11 / 2 = 5 …… 1
  • 5 / 2 = 2 …… 1
  • 2 / 2 = 1 …… 0
  • 1 / 2 = 0 …… 1
    所以转换后的数为10110

2.2 进制转换代码展示

(1)N进制转十进制

# N进制转十进制mid_num = 0temp = 0for j in S[::-1]:# 判断是否为字母if j >= 'A' and j <= 'Z':# ord函数得到字符的ASCII编码j = ord(j) - ord('A') + 10mid_num += int(math.pow(N, temp)) * int(j)temp += 1
  • 用mid_num代表N进制到M进制的中转十进制数
  • temp代表N的0到n次方,因为此段代码是包含在一段循环代码中的
  • 通过ord函数得到字符ASCII编码实现字母转换成数字
  • pow数学函数意为幂函数,括号内第一个数为底数,第二个数为指数

(2)十进制转M进制

# 十进制转M进制result = []while mid_num > 0:digit = mid_num % M if digit < 10:result.append(str(digit))else:# chr函数通过ASCII码值返回其对应的字符result.append(chr(digit - 10 + ord('A')))# 需注意是整除即将转换的进制Mmid_num //= Mresult = ''.join(reversed(result))
  • result变成列表存储,便于用append不断增加得到的余数
  • chr函数通过ASCII编码值返回对应字符,用于计算完对应数字并进行转换
  • 需注意mid_num循环时整除的并非数字10而是要求的进制M
  • 最后用reversed加join函数逆序排放

本题重点即进制转换,其中需要注意10-15代表A-F,其余按正常逻辑编写即可。

完整代码

import mathT = int(input())
for i in range(T):# S为N进制数,需转换成M进制数输出N,M = map(int, input().split())S = input()# N进制转十进制mid_num = 0temp = 0for j in S[::-1]:# 判断是否为字母if j >= 'A' and j <= 'Z':# ord函数得到字符的ASCII编码j = ord(j) - ord('A') + 10mid_num += int(math.pow(N, temp)) * int(j)temp += 1# 十进制转M进制result = []while mid_num > 0:digit = mid_num % M if digit < 10:result.append(str(digit))else:# chr函数通过ASCII码值返回其对应的字符result.append(chr(digit - 10 + ord('A')))# 需注意是整除即将转换的进制Mmid_num //= Mresult = ''.join(reversed(result))print(result)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍:kotlin - 显示HDR图(heic格式),使用GainMap算法,速度从5秒提升到0.6秒

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

anything

ValueError Traceback (most recent call last)Cell In[20], line 8 3 client = OpenAI() 4 # client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"), base_url=os.getenv("OPENAI_BASE_URL…

递归函数,闭包,装饰器3

递归函数,闭包,装饰器3递归函数 含义:如果一个函数在内部不调用其他的函数,而是调用它本身的话,这个函数就是递归函数 条件: 1,明确的结束条件 2.没进行更深一层的递归时,问题规模相比上次递归都要有所减少。…

从vw/vh到clamp(),前端响应式设计的痛点与进化 - 实践

从vw/vh到clamp(),前端响应式设计的痛点与进化 - 实践2025-12-03 20:17 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; d…

10413_基于Springboot的智慧养老院管理系统

1、项目包含 项目源码、项目文档、数据库脚本、软件工具等资料; 带你从零开始部署运行本套系统。 2、项目介绍 随着老龄化社会的加速发展,传统养老院管理模式面临效率低、服务滞后等挑战。本研究着力打造一套凭Sprin…

【Unity URP】Rendering Debugger和可视化MipMap方案

写在前面 最近开始学习Unity性能优化,是结合了《Unity游戏优化》这本书和教程《Unity性能优化》第叁节——静态资源优化(3)——纹理的基础概念一起学习。在学习纹理优化部分时候遇到了问题,固定管线下Unity的Scene窗…

How to do a biology experiment for a Physician.

Im not kidding.Be early. Normally, all materials should be scheduled. But if theres not schedule, all biologists will think he is important ———— because they know what life is. The humblest will be…

2025–2030 年最紧缺的八大 IC 岗位

面对摩尔定律放缓、AI 和汽车电子爆发、Chiplet 与 3D-IC 持续改写系统架构,半导体行业正在进入一个全新的竞争周期。技术路径的变化,也正在深刻影响人才需求结构:行业不再只需要“通才”,而是更稀缺、也更关键的专…

Firefox 禁用按下 Alt 显示菜单

进入 about:config,将 ui.key.menuAccessKey 默认的 18 改成 0,重启浏览器。

LC 3479(2100) 线段树二分 水果成篮

题目 题目: 给你两个长度为 n 的整数数组,fruits 和 baskets,其中 fruits[i] 表示第 i 种水果的 数量,baskets[j] 表示第 j 个篮子的 容量。 你需要对 fruits 数组从左到右按照以下规则放置水果: 每种水果必须放入…

文件的常用操作

Path相关操作,主要为文件属性,路径目录等点击查看代码 def _Path():from pathlib import Pathimport shutil# 创建 Path 对象print(Path().absolute())p = Path("data/example.txt")p1 = Path("data/d…

聊聊Oracle数据库的向量能力 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

ReAct+LangGraph:构建智能AI Agent的完整指南(建议收藏) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

第七天项目

苍穹外卖项目 - 第7天冲刺日志(项目总结与复盘) 日期:2025-12-02 冲刺周期:第7天/共7天 参会人员:李靖华 温尚熙 谢斯越 郑哲磊一、站立会议照片团队成员进行项目总结和复盘讨论二、最终验收会议记录 郑哲磊(后端…

Spring Boot框架中在Controller方法里获取Request和Response对象的2种方式

写在前面 javax.servlet.ServletRequest和javax.servlet.ServletResponse都是Servlet容器中定义的接口,分别用于获取客户端请求信息和将响应消息发送给客户端。 有两种方法在Contoller方法中获取它们:直接在Controll…

2025煤炭氟氯测定仪TOP5权威推荐:精准检测选对品牌,奥

煤质环保检测领域中,氟氯测定仪作为判定煤炭环保合规性的核心设备,其精准度、耐用性直接影响检测结果与企业生产效率。2024年行业数据显示,因氟氯测定仪检测偏差导致的环保合规风险事件占煤质检测问题的30%,而耐用…

2025年上海办公室装修公司口碑排名:迎湖办公室装修实力可靠

办公室是企业的第二战场,从空间规划到材料环保,每一处细节都关乎员工效率与品牌形象。面对市场上良莠不齐的装修公司,企业主常常陷入承诺与现实不符的困境:报价藏增项、工期拖延、材料不环保等问题频发。2025年办公…

Scrum 冲刺博客_4

Scrum 冲刺博客_4 站立式会议照片:昨天已完成工作:团队共同敲定数据接口规范 v1.0,明确了所有核心接口的参数、返回格式及异常码。 前端组基于接口规范,完成了前端请求封装的 TypeScript 类型声明,搭建了 Axios 请…

第五天项目

苍穹外卖项目 - 第5天冲刺日志 日期:2025-11-30 冲刺周期:第5天/共7天 会议时间:09:00 - 09:15 会议地点:开发室 参会人员:李靖华 温尚熙 谢斯越 郑哲磊一、站立会议照片团队成员正在讨论数据统计功能的实现细节二…

[豪の算法奇妙冒险] 代码随想录算法训练营第十四天 | 翻转二叉树、对称二叉树、二叉树的最大深度、二叉树的最小深度

翻转二叉树、对称二叉树、二叉树的最大深度、二叉树的最小深度代码随想录算法训练营第十四天 | 翻转二叉树、对称二叉树、二叉树的最大深度、二叉树的最小深度翻转二叉树题目链接:https://leetcode.cn/problems/inver…