// 定义函数 calc,用于将字符转换为对应的数值intcalc(char c){// 若字符 c 大于等于 '9'(注:此处条件可能需根据实际需求确认,当前按代码逻辑注释)if(c >='9'){// 处理类似十六进制字母的情况,转换为 10 + 字母对应的数值(如 'A' 转 10)return10+ c -'A';}// 将字符转换为数字(如 '0' 转 0,'5' 转 5)return c -'0';}// 定义函数 change,将字符串 s 转换为整数(参数 k 代码中未使用)intchange(int k, string s){int ans =0;// 遍历字符串 s 的每个字符for(int i =0; i < s.size(); i++){// 逐步构建整数:每次将当前结果乘 10,加上当前字符转换后的数值ans = ans *10+calc(s[i]);}// 返回最终转换后的整数结果return ans;}
十六进制转十进制
代码演示
#include<string>usingnamespace std;// 函数功能:将单个字符转换为对应的数值(处理数字和字母字符)intcalc(char c){// 判断字符是否为字母(A-Z或a-z,此处示例仅处理大写,实际可扩展)if(c >='A'){return10+ c -'A';// 转换为对应数值,A→10,B→11,以此类推}return c -'0';// 如果是数字字符,转换为对应的数字值(如'0'→0,'5'→5)}// 函数功能:将k进制的字符串s转换为十进制整数intchange(int k, string s){int ans =0;for(int i =0; i < s.size(); i++){// 按k进制规则累加:每一位乘以k的幂次并累加ans = ans * k +calc(s[i]);}return ans;// 返回最终转换后的十进制数}
十进制转K进制
代码演示
string change(int x,int k){ string ans ="";// 初始化空字符串,用于存储转换结果 while(x !=0){int t = x % k;// 计算 x 对 k 取余,得到当前位的值 // 如果余数小于等于9,直接将其转换为字符并追加到结果字符串 if(t <=9){ ans = ans +(char)('0'+ t);// '0' + t 转为对应数字字符 }else{// 如果余数大于9,表示需要用字母 A,B,C...表示(例如10为A,11为B等) ans = ans +(char)('A'+ t -10);// 'A' + (t - 10) 转为对应字母 } x /= k;// 更新 x,x 除以 k }// 将结果字符串反转并返回,返回的字符串为转换后的进制表示 returnreverse(ans.begin(), ans.end());// reverse 是反转字符串的标准操作 }
任意进制之间的转换
代码演示
#include<bits/stdc++.h>usingnamespace std;// 计算 n 进制数对应的十进制数intcalc(int n,const string& num_str){int decimal_num =0;for(char c : num_str){if(c >='0'&& c <='9'){// 数字字符转换为对应数值并累加到结果decimal_num = decimal_num * n +(c -'0');}else{// 字母字符(A - F)转换为对应数值(10 - 15)并累加到结果decimal_num = decimal_num * n +(c -'A'+10);}}return decimal_num;}// 将十进制数转换为 m 进制数
string decimalToM(int decimal_num,int m){string res;if(decimal_num ==0){return"0";}const string digits ="0123456789ABCDEF";while(decimal_num >0){// 取当前十进制数除以 m 的余数int remainder = decimal_num % m;// 将余数对应的字符添加到结果字符串res += digits[remainder];// 更新十进制数,为下一次取余做准备decimal_num /= m;}// 使用 reverse 反转结果字符串reverse(res.begin(), res.end());return res;}intmain(){int n, m;string num_str;// 读取输入的进制 ncin >> n;// 读取输入的 n 进制数cin >> num_str;// 读取要转换到的目标进制 mcin >> m;// 先将 n 进制数转换为十进制数int decimal_num =calc(n, num_str);// 再将十进制数转换为 m 进制数string result =decimalToM(decimal_num, m);// 输出转换后的 m 进制数cout << result << endl;return0;}