table of Contents
1. Code
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
void MenuShow() {
cout << " 请选择原进制类型" << endl;
cout << " ####" << "1.二进制" << "####" << endl;
cout << " ####" << "2.三进制" << "####" << endl;
cout << " ####" << "3.八进制" << "####" << endl;
cout << " ####" << "4.10进制" << "####" << endl;
cout << " ####" << "5.16进制" << "####" << endl;
cout << " ###" << "0.退出系统" << "###" << endl;
}
void MenuShow2() {
cout << " 请选择目标进制类型" << endl;
cout << " ####" << "1.二进制" << "####" << endl;
cout << " ####" << "2.三进制" << "####" << endl;
cout << " ####" << "3.八进制" << "####" << endl;
cout << " ####" << "4.10进制" << "####" << endl;
cout << " ####" << "5.16进制" << "####" << endl;
}
// 将数字转为字符如 8->'8' 10->'A'
char Num_Char(char num) {
//当num在0-9范围内
if (num <= 9 && num >= 0)
{
num += 48;
}
//当num在10-15范围内
else {
switch (num)
{
case 10:
num = 'A'; break;
case 11:
num = 'B'; break;
case 12:
num = 'C'; break;
case 13:
num = 'D'; break;
case 14:
num = 'E'; break;
case 15:
num = 'F'; break;
}
}
return num;
}
// 将字符转为数字如 '8'->8 'A'->10
int Char_Num(char &num) {
if (num <= '9' && num >= '0')
{
num -= 48;
}
else
{
switch (num)
{
case 'A':
case 'a':
num = 10; break;
case 'B':
case 'b':
num = 11; break;
case 'C':
case 'c':
num = 12; break;
case 'D':
case 'd':
num = 13; break;
case 'E':
case 'e':
num = 14; break;
case 'F':
case 'f':
num = 15; break;
}
}
return num;
}
//将任意进制转换为10进制
int SystemN_10(string num, int system) {
//num为任意进制数字 system是原进制
int length = num.size();
int Num = 0;
for (int i = 0; i < length; i++) {
Num += Char_Num(num[i]) * pow(system , length - i - 1);
}
return Num;
}
/*将十进制转化为任意进制,system10为十进制整数,system为需要转化的进制*/
void System10_N(int system10 , int system) {
string result;//保存x进制数
char temp;
while (system10 > 0)
{
temp = system10 % system;
result += Num_Char(temp);
system10 = system10 / system;
}
/*输出转化后的x进制整数*/
for (int i = result.size() - 1; i >= 0; i--)
cout << result[i];
cout << endl;
}
int SystemN_N(int j, int x) {
//二进制 三进制 八进制 十进制 八进制互相转换
// j为你输入的进制 x为你需要的目标进制
string s;
cout << "请输入要转换的数字: " << endl;
cin >> s;
int n = SystemN_10(s, j);
cout << endl << "经转换后的进制数为: " << endl;
System10_N(n, x);
system("pause");
return 0;
}
int main() {
int choose1, choose2;
while (true) {
MenuShow();
cin >> choose1;
switch (choose1)
{
case 1:
MenuShow2();
cin >> choose2;
switch (choose2)
{
case 1:
SystemN_N(2, 2);
break;
case 2:
SystemN_N(2, 3);
break;
case 3:
SystemN_N(2, 8);
break;
case 4:
SystemN_N(2, 10);
break;
case 5:
SystemN_N(2, 16);
break;
default:
break;
}
break;
case 2:
MenuShow2();
cin >> choose2;
switch (choose2)
{
case 1:
SystemN_N(3, 2);
break;
case 2:
SystemN_N(3, 3);
break;
case 3:
SystemN_N(3, 8);
break;
case 4:
SystemN_N(3, 10);
break;
case 5:
SystemN_N(3, 16);
break;
default:
break;
}
break;
case 3:
MenuShow2();
cin >> choose2;
switch (choose2)
{
case 1:
SystemN_N(8, 2);
break;
case 2:
SystemN_N(8, 3);
break;
case 3:
SystemN_N(8, 8);
break;
case 4:
SystemN_N(8, 10);
break;
case 5:
SystemN_N(8, 16);
break;
default:
break;
}
break;
case 4:
MenuShow2();
cin >> choose2;
switch (choose2)
{
case 1:
SystemN_N(10, 2);
break;
case 2:
SystemN_N(10, 3);
break;
case 3:
SystemN_N(10, 8);
break;
case 4:
SystemN_N(10, 10);
break;
case 5:
SystemN_N(10, 16);
break;
default:
break;
}
break;
case 5:
MenuShow2();
cin >> choose2;
switch (choose2)
{
case 1:
SystemN_N(16, 2);
break;
case 2:
SystemN_N(16, 3);
break;
case 3:
SystemN_N(16, 8);
break;
case 4:
SystemN_N(16, 10);
break;
case 5:
SystemN_N(16, 16);
break;
default:
break;
}
break;
case 0:
cout << "欢迎下次使用..." << endl;
system("pause");
return 0;
default:
break;
}
system("cls");
}
system("pause");
return 0;
}
2. Summary of ideas
①There will be numbers and letters appear together in the base conversion, so I think the better way is to convert them into ASCII codes, it will be much more convenient to use ASCII to calculate.
②Pay attention to the numbers 1, 2, 3, etc. when using ASCII codes All have corresponding ASCII values
③In fact, the conversion between the bases can be classified as: the original base is converted to decimal, and the decimal is converted to the target base
Additional ASCII table
#### ASCII table