3 条题解
-
0
进制转换代码笔记(通用版:十进制 → 任意进制 2~36)
这是可把任意十进制数,转换成 2~36 进制的通用代码,比只转二进制更实用,笔记按代码结构+核心原理整理,直接背会就能用!
一、完整代码(带注释)
#include<bits/stdc++.h> // 万能头文件:包含所有C++常用库(字符串、输入输出、反转函数等) using namespace std; // 使用标准命名空间,不用写std::cout/std::cin int main(){ string s = ""; // 定义空字符串:存储转换后的进制结果 int n; // 待转换的**十进制数** int r; // 目标进制(2进制、8进制、16进制...最多36进制) cin >> n >> r; // 输入:第一个数=十进制n,第二个数=目标进制r // 核心循环:除基取余法(基=目标进制r) while(n){ // 循环条件:n不等于0就继续(n>0时为真,n=0结束) int t = n % r; // 1. 取余数:n除以r的余数(就是当前位的数字) // 2. 把余数转成对应字符,拼接到字符串 if(t < 10){ // 余数0~9:直接转成数字字符 s += t + '0'; }else{ // 余数≥10(10~35):转成A~Z(10=A,11=B...35=Z) s += t - 10 + 'A'; } n = n / r; // 3. 更新n:n除以r取整,为下一次循环做准备 } reverse(s.begin(), s.end()); // 反转字符串(因为取余得到的是逆序) cout << s; // 输出最终转换结果 return 0; }二、核心知识点笔记
1. 头文件 & 命名空间
#include<bits/stdc++.h>:万能头文件,写这一行就不用单独写<iostream>、<string>、<algorithm>,能直接用cin/cout/reverse。using namespace std;:必须写,否则cout/cin/string会报错。
2. 变量作用
string s = "":存结果,因为进制会出现字母,必须用字符串存。int n:输入的十进制数(要转换的数)。int r:目标进制(2=二进制,8=八进制,16=十六进制,36=三十六进制)。
3. 核心算法:除基取余法(十进制转任意进制)
- 取余数:
n % r→ 得到当前位的数字(从低位到高位)。 - 转字符:
- 余数
0~9→ 加'0'转成数字字符('0'是字符0,ASCII码偏移)。 - 余数
≥10→ 减10再加'A',转成大写字母(10→A,11→B…35→Z)。
- 余数
- 更新数值:
n = n / r(整除,去掉已转换的低位)。 - 循环结束:
n变成0时,停止取余。
4. 关键函数:reverse()
- 作用:反转字符串。
- 原因:除基取余得到的结果是逆序(先算低位,后算高位),必须反转才是正确顺序。
- 用法:
reverse(字符串开头, 字符串结尾)→reverse(s.begin(), s.end())。
5. 输入输出规则
- 输入格式:
十进制数 目标进制(例:输入25 2→ 输出11001)。 - 输出:直接打印转换完成的进制字符串。
三、代码运行示例
示例1:十进制25 → 二进制
输入:
25 2执行过程: 25%2=1 → 25/2=12 12%2=0 → 12/2=6 6%2=0 →6/2=3 3%2=1 →3/2=1 1%2=1 →1/2=0 余数拼接:10011→ 反转 →11001输出:11001示例2:十进制25 → 十六进制
输入:
25 1625%16=9 → 25/16=1 1%16=1 →1/16=0 余数拼接:91→ 反转 →19输出:19示例3:十进制30 → 十六进制
输入:
30 1630%16=14 → 转E → 30/16=1 1%16=1 →1/16=0 余数拼接:E1→ 反转 →1E输出:1E四、必背重点
- 十进制转任意进制核心:除基取余,逆序输出。
- 数字转字符:
数字 + '0';字母转字符:数字-10 + 'A'。 - 最后一定要用
reverse()反转,否则结果是反的! - 支持进制范围:2~36进制(0~9、A~Z 共36个字符)。
总结
- 这是通用进制转换代码,支持 2~36 进制,比赛/刷题最常用;
- 核心是
除基取余+字符转换+反转字符串三步; - 记住
'0'和'A'的ASCII码偏移,就能搞定数字字母转换。
-
0
#include<bits/stdc++.h> //万能头文件 为了使用reverse(s.begin(),s.end()); using namespace std; int main(){ string s = ""; // 定义了一个空字符串 int n; // 要进行转换的十进制 int r; // 要进行转换的r进制 这里是2进制 cin >>n>>r; //读取n的值 while(n){ int t = n%r; if(t<10){ s +=t+'0'; // 把int类型转换为了字符类型(string) }else{ s+=t-10+'A'; // 把大于等于10的数字转换为对应的字母 } n/=r;// n每次除以r,直到n为0 为止 } //反转字符串 s reverse(s.begin(),s.end()); cout <<s; //输出最终的结果 return 0; }
- 1
信息
- ID
- 4583
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 60
- 已通过
- 7
- 上传者
粤公网安备44195502000195号