news 2026/4/23 16:22:21

算法学习日记 | 进制转换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法学习日记 | 进制转换

🧠 算法学习日记 | 今天我用「进制转换」解了三道题,原来数学也能写成代码!

大家好,我是你们的算法学习搭子 👋
今天继续我的算法入门之旅,重点练习了进制转换这一基础但极其重要的数学与编程结合点。

很多人觉得“进制转换”只是小学数学知识,但其实,在编程中,它是一个典型的“模拟数学过程”的例子。
我们不仅要会算,还要能写出通用的程序来处理任意进制之间的转换。

今天我完整做了三道题,每一道都坚持用最朴素的逻辑实现。下面我把题目原文我的原始代码原封不动贴出来,不做任何删减或美化,只为真实记录学习过程。


🔹 题目一:十六进制转十进制

问题描述
请问十六进制数2021ABCD对应的十进制是多少?

答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

运行限制

  • 最大运行时间:1s
  • 最大运行内存:256M

难度:易 LV.2
标签:2022, 省模拟赛, 代码填空

✅ 我的代码(完全保留原始写法)

#include<iostream>#include<string>usingnamespacestd;intcal(charx){if(x>='A'){returnx+10-'A';}returnx-'0';}intchange(intk,string s){intans=0;for(inti=0;i<s.size();i++){ans=ans*k+cal(s[i]);}returnans;}intmain(){cout<<change(16,"2021ABCD");return0;}

🔹 题目二:九进制转十进制

问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

九进制正整数(2022)9(2022)_9(2022)9转换成十进制等于多少?

运行限制

  • 最大运行时间:1s
  • 最大运行内存:512M

难度:易 LV.1
标签:2022, 省赛, 进制转换

✅ 我的代码(完全保留原始写法)

#include<iostream>#include<string>#include<algorithm>usingnamespacestd;intcal(chars){if(s>='A'){returns-'A'+10;}returns-'0';}intchange(intk,string s){intans=0;for(inti=0;i<s.size();i++){ans=ans*k+cal(s[i]);}returnans;}intmain(){cout<<change(9,"2022");return0;}

🔹 题目三:任意进制转换

题目描述
给定一个 $ N $ 进制数 $ S $,请你将它转换为 $ M $ 进制。

输入描述
第一行为一个整数 $ T,表示测试数据数量。(,表示测试数据数量。(,表示测试数据数量。(1 \leq T \leq 10^5 $)

每个测试用例包含两行,第一行包含两个整数 $ N, M $。
第二行输入一个字符串 $ S $,表示 $ N $ 进制数。

数据范围保证:$ 2 \leq N, M \leq 16 $,若 $ N \geq 10 $,则用 $ A \sim F $ 表示数码 $ 10 \sim 15 $。保证 $ S $ 对应的十进制数的位数不超过 10。

输出描述
输出共 $ T $ 行,每行表示一组数据的答案。

输入样例

2 2 10 10101 11 2 1793A5068

输出样例

21 101011110010101001110101010111

运行限制

  • 最大运行时间:1s
  • 最大运行内存:128M

✅ 我的代码(完全保留原始写法)

#include<iostream>#include<string>#include<algorithm>usingnamespacestd;intcal(chars){if(s>='A'){returns-'A'+10;}elsereturns-'0';}intchange_to_10(intk,string s){intans=0;for(inti=0;i<s.size();i++){ans=ans*k+cal(s[i]);}returnans;}stringchange(intk,intx){string ans="";while(x!=0){intt=x%k;if(t<9){ans=ans+(char)(t+'0');}else{ans=ans+(char)(t-10+'A');}x/=k;}reverse(ans.begin(),ans.end());returnans;}intmain(){intn;cin>>n;inta,b;string s;for(inti=0;i<n;i++){cin>>a>>b;cin>>s;cout<<change(b,change_to_10(a,s))<<endl;}return0;}

🌟 我的思考

这三道题,虽然形式不同,但核心思想一致:

进制转换 = 模拟数学运算过程

我们可以把整个过程拆解为两步:

  1. N 进制 → 十进制:从高位到低位,每一位乘以 $ N^{\text{位数}} $ 累加。
  2. 十进制 → M 进制:不断除以 M,取余数倒序排列。

而代码中的cal()函数,就是用来处理字符'A'~'F'到数字 10~15 的映射,这是进制转换中必不可少的一环。

你会发现:

  • 第一题和第二题是特例,直接调用change()函数即可;
  • 第三题是通用版本,先转十进制,再转目标进制;
  • 所有代码都基于同一个逻辑框架,只是输入参数不同。

这说明:编程的本质,是将通用规律封装成函数,再复用解决具体问题


✅ 总结

  • 进制转换不是“背公式”,而是“理解数学过程”
  • 任意进制 → 十进制:从左到右,逐位累加
  • 十进制 → 任意进制:不断取模,倒序输出
  • 字符转数字:'A'-'A'=0,'B'-'A'=1, …,'F'-'A'=5
  • 多进制处理可以用统一函数 + 分步转换

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:23:32

基于PLC的工业机械手控制系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于PLC的工业机械手控制系统设计(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 摘 要 生产制造企业在生产过程中主要关注的内容是工作人员的工作的效率&#xff0c;还有一个就是工人的安全问题。我们之所以要关注这些东西&a…

作者头像 李华
网站建设 2026/4/23 12:14:07

基于PLC的景观建筑供水水泵控制系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于PLC的景观建筑供水水泵控制系统设计(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 基于PLC的景观建筑供水水泵控制系统设计 摘要&#xff1a;随着生活条件的提高&#xff0c;环境也越来越美观&#xff0c;水景作为人们生…

作者头像 李华
网站建设 2026/4/23 12:24:23

国家力推5大“金饭碗”专业,就业率近100%,毕业生抢疯了!

国家力推5大“金饭碗”专业&#xff0c;就业率近100%&#xff0c;毕业生抢疯了&#xff01; 最新数据炸裂了&#xff01;2025年国家重点推出的5大"金饭碗"专业&#xff0c;就业率逼近100%。毕业生抢疯了&#xff01;什么概念&#xff1f;这可不是普通的热门专业。而…

作者头像 李华
网站建设 2026/4/23 12:15:52

全球十大激光企业技术盘点,分析行业核心竞争格局

激光技术&#xff0c;作为现代制造业里关键的赋能技术&#xff0c;它的应用&#xff0c;已经渗透进精密加工领域&#xff0c;新能源汽车领域&#xff0c;消费电子领域&#xff0c;航空航天等诸多核心工业领域之中。全球激光产业&#xff0c;历经数十年的发展&#xff0c;形成了…

作者头像 李华