3 条题解

  • 0
    @ 2026-4-19 12:07:29

    6667878

    • 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码偏移,就能搞定数字字母转换。
      • 0
        @ 2026-4-18 20:32:02
        #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
        上传者