3 条题解

  • 0
    @ 2026-4-19 9:53:51

    进制转换代码笔记(通用版:十进制 → 任意进制 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. 核心算法:除基取余法(十进制转任意进制)

    1. 取余数n % r → 得到当前位的数字(从低位到高位)。
    2. 转字符
      • 余数0~9 → 加'0'转成数字字符('0'是字符0,ASCII码偏移)。
      • 余数≥10 → 减10再加'A',转成大写字母(10→A,11→B…35→Z)。
    3. 更新数值n = n / r(整除,去掉已转换的低位)。
    4. 循环结束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 16 25%16=9 → 25/16=1 1%16=1 →1/16=0 余数拼接:91 → 反转 → 19 输出:19

    示例3:十进制30 → 十六进制

    输入:30 16 30%16=14 → 转E → 30/16=1 1%16=1 →1/16=0 余数拼接:E1 → 反转 → 1E 输出:1E

    四、必背重点

    1. 十进制转任意进制核心:除基取余,逆序输出
    2. 数字转字符:数字 + '0';字母转字符:数字-10 + 'A'
    3. 最后一定要用reverse()反转,否则结果是反的!
    4. 支持进制范围:2~36进制(0~9、A~Z 共36个字符)。

    总结

    1. 这是通用进制转换代码,支持 2~36 进制,比赛/刷题最常用;
    2. 核心是除基取余+字符转换+反转字符串三步;
    3. 记住'0''A'的ASCII码偏移,就能搞定数字字母转换。

    信息

    ID
    4583
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    60
    已通过
    7
    上传者