目录
十进制转其他进制(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.二的幂次进制之间转换可以借助二进制中转