news 2026/9/3 0:06:02

算法学习日记 | 进制转换

作者头像

张小明

前端开发工程师

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/9/2 1:04:17

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

基于PLC的锅炉控制系统设计(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 摘 要 由于当前国民经济和科学技术的高速发展,人民的生活也日益离不开锅炉的电能和供暖系统,从长期考虑,目前我们的能源消费大部分还是以煤炭为主,而…

作者头像 李华
网站建设 2026/9/2 21:53:35

局域网搭建一个开源的邮件系统做实验用,域名应该怎么选呢?随便写一个可以吗?(结论是建议用私有域名‌(如 example.local 或 mail.test)来模拟真实环境)

在局域网环境中搭建开源邮件系统做实验时&#xff0c;‌不建议随便写一个域名‌&#xff0c;但你可以使用一个‌私有域名‌&#xff08;如 example.local 或 mail.test&#xff09;来模拟真实环境&#xff0c;这是完全可行且推荐的做法。✅ 正确做法&#xff1a;使用私有域名进…

作者头像 李华
网站建设 2026/8/30 2:32:58

研究发现,57%的消费者在品牌使用人工智能时更信任它们

消费者终于开始接受人工智能了吗&#xff1f;根据 Optimove 发布的《2025 年人工智能营销信任与参与度报告》&#xff0c;尽管多年来的研究显示消费者不喜欢这项技术&#xff0c;但如今有 57% 的消费者表示&#xff0c;当人工智能成为体验的一部分时&#xff0c;他们对品牌的信…

作者头像 李华
网站建设 2026/8/31 8:28:40

基于PLC的电动汽车智能充电站(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于PLC的电动汽车智能充电站(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 摘要&#xff1a;随着社会的不断发展&#xff0c;人类对石油资源的需求也越来越高了&#xff0c;能源提供和需要已经有了非常大的矛盾。据数据统计…

作者头像 李华
网站建设 2026/8/31 12:11:31

低门槛AI工具链:中小企业测试自动化入门指南

1.AI测试自动化的时代机遇中小企业在敏捷开发浪潮下面临严峻挑战&#xff1a;需求频繁变更导致用例维护成本飙升&#xff0c;回归测试耗时占开发周期的60%以上&#xff0c;而团队规模却难以扩张。传统自动化测试依赖高技能编码人员&#xff0c;但中小企业常面临技术人才短缺、预…

作者头像 李华