news 2026/3/26 9:53:28

算法学习日记 | 进制转换

作者头像

张小明

前端开发工程师

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/3/14 11:53:26

什么是网络爬虫?有什么用?怎么爬?终于有人讲明白了

【导读】网络爬虫也叫做网络机器人&#xff0c;可以代替人们自动地在互联网中进行数据信息的采集与整理。在大数据时代&#xff0c;信息的采集是一项重要的工作&#xff0c;如果单纯靠人力进行信息采集&#xff0c;不仅低效繁琐&#xff0c;搜集的成本也会提高。 此时&#xf…

作者头像 李华
网站建设 2026/3/21 12:30:48

物联网平台赋能可视化数据与决策,打造工厂“智慧大脑”

在数字化转型浪潮中&#xff0c;数据已成为企业的新型生产要素。然而&#xff0c;对于许多企业管理者而言&#xff0c;面临的核心挑战不是数据匮乏&#xff0c;而是数据“看不见、看不懂、用不上”。海量的设备数据、生产数据、能耗数据分散在各个系统中&#xff0c;无法形成全…

作者头像 李华
网站建设 2026/3/17 0:57:05

书籍-亨利·裕尔《东域纪程录丛》

亨利裕尔《东域纪程录丛》详细介绍 书籍基本信息 书名&#xff1a;东域纪程录丛&#xff08;Cathay and the Way Thither&#xff0c;又译《古代中国闻见录》《契丹与通往契丹之路》&#xff09; 作者&#xff1a;亨利裕尔&#xff08;Henry Yule&#xff0c;1820-1889&#xf…

作者头像 李华
网站建设 2026/3/16 17:47:27

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

基于PLC的高科技房屋安防控制系统(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 基于PLC的高科技房屋安防控制系统 摘要&#xff1a;由于中国的经济很快发展&#xff0c;人们的生活质量有所改善&#xff0c;装修安家的概念对…

作者头像 李华
网站建设 2026/3/21 23:25:29

什么是车载网关?有什么推荐?

随着车联网技术的快速发展&#xff0c;车载网关作为车辆数据采集、处理和传输的核心设备&#xff0c;正扮演着越来越重要的角色。无论是商用车队管理、新能源车监控、智能驾驶研发&#xff0c;还是特种车辆调度&#xff0c;选择一款合适的车载网关都至关重要。一、车载网关的核…

作者头像 李华