news 2026/4/21 21:10: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/4/18 5:10:17

用yolov12的框架训练过yolov5的预训练权重之后,再用yolov12的预训练权重训练出现了训练不了的情况,如何解决??

&#x1f3c6;本文收录于 《全栈 Bug 调优&#xff08;实战版&#xff09;》 专栏。专栏聚焦真实项目中的各类疑难 Bug&#xff0c;从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解&#xff0c;形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者&…

作者头像 李华
网站建设 2026/4/18 5:12:48

js--12

一、Java GUI 开发基础 1. 核心概念 GUI&#xff08;图形用户界面&#xff09;是采用图形化方式展示的操作界面&#xff0c;Java 中主要通过以下两个包实现&#xff1a; AWT&#xff1a;抽象窗口工具包&#xff0c;依赖本地系统&#xff0c;界面风格与系统绑定。Swing&#…

作者头像 李华
网站建设 2026/4/18 6:30:57

化学实验室数字化管理:RFID技术如何重塑试剂管理生态

在化学实验室的静谧深处&#xff0c;隐藏着一场悄然发生的技术革命。数以百计的试剂瓶不再是沉默的容器&#xff0c;每一支都拥有了自己的“数字身份证”。试剂何时被取出、由谁使用、剩余多少、存放条件是否合规——这些信息以前需要人工记录的繁琐数据&#xff0c;如今正通过…

作者头像 李华
网站建设 2026/4/18 6:30:42

nodejs+vue运动健康饮食健身追踪系统

文章目录系统概述技术架构核心功能扩展特性应用场景--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 Node.js与Vue.js结合的运动健康饮食健身追踪系统&#xff0c;旨在为用户提供一体化的健康管理解决方案…

作者头像 李华