进制转换问题
目录
十进制转其他进制(2-10)
递归形式
其他进制转十进制
递归形式
十进制转十六进制(大写)
十六进制转十进制
完整版
其他进制之间的转换
十进制转其他进制(2-10)
//通用进制转换函数
//十进制转其他进制(2-10)
int decimalToBase(int num, int base) {int res = 0;//此处涉及到结果储存问题://1.数字,需要移位,不能直接相加//2.字符串,需要转换,但在末尾插入简单int m=1;while (num) {res += (num % base) * m;m *= 10;num /= base;}return res;
}
递归形式
//递归形式
int decimalToBase(int num, int base) {if (num == 0)return 0;return num % base + 10*decimalToBase(num / base, base);
}
其他进制转十进制
int baseToDecimal(int num, int base) {int res = 0;int m = 1;while (num) {//此处注意m要变化res += m*(num % 10);m *= base;num /= 10;}return res;
}
递归形式
//递归形式
int baseToDecimal(int num, int base) {if (num == 0)return 0;return num % 10 + base*baseToDecimal(num / 10, base);
}
两个递归形式结构一样
十进制转十六进制(大写)
//十六进制的储存可以是string类型,也可以是int数组(输出时要将大于9的进行转换)
string decimalToHex(int num) {string res="";char c;while (num) {if (num % 16 <= 9) {c = num % 16+'0';//此处注意int转char}else {c = 'A' + num % 16 - 10;}res += c;num /= 16;}reverse(res.begin(),res.end());//注意反转return res;
}
十六进制转十进制
int hexToDecimal(string num) {int len = num.length();int res = 0;int m = 1;for (int i = len-1;i >=0;i--) {if (num[i] >= 'A' && num[i] <= 'Z') {res += m*(num[i] - 'A'+10);}else {res += m*(num[i] - '0');}m *= 16;}return res;
}
完整版
#include <bits/stdc++.h>
using namespace std;
//通用进制转换函数
//十进制转其他进制(2-10)
int decimalToBase(int num, int base) {int res = 0;//此处涉及到结果储存问题://1.数字,需要移位,不能直接相加//2.字符串,需要转换,但在末尾插入简单int m=1;while (num) {res += (num % base) * m;m *= 10;num /= base;}return res;
}
//递归形式
int decimalToBase(int num, int base) {if (num == 0)return 0;return num % base + 10*decimalToBase(num / base, base);
}
//其他进制转十进制
int baseToDecimal(int num, int base) {int res = 0;int m = 1;while (num) {//此处注意m要变化res += m*(num % 10);m *= base;num /= 10;}return res;
}
//递归形式
int baseToDecimal(int num, int base) {if (num == 0)return 0;return num % 10 + base*baseToDecimal(num / 10, base);
}
//十进制转十六进制(大写)
//十六进制的储存可以是string类型,也可以是int数组(输出时要将大于9的进行转换)
string decimalToHex(int num) {string res="";char c;while (num) {if (num % 16 <= 9) {c = num % 16+'0';}else {c = 'A' + num % 16 - 10;}res += c;num /= 16;}reverse(res.begin(),res.end());return res;
}
//十六进制转十进制
int hexToDecimal(string num) {int len = num.length();int res = 0;int m = 1;for (int i = len-1;i >=0;i--) {if (num[i] >= 'A' && num[i] <= 'Z') {res += m*(num[i] - 'A'+10);}else {res += m*(num[i] - '0');}m *= 16;}return res;
}
int main() {//cout << decimalToBase(8,2);//cout << baseToDecimal(110,8);//cout<<decimalToHex(165);cout << hexToDecimal("A5");return 0;
}
其他进制之间的转换
1.借助十进制中转
2.二的幂次进制之间转换可以借助二进制中转