C++编写程序实现 二进制 八进制 十进制 十六进制相互转换 格式如下 一级菜单: (1)2进制数转换 (2)8进制数转换 (3)10进制数转换 (4)16进制数转换 (0)退出 二级菜单:(只是以2进制转其他进制为例,其他进制相同) (1)2进制数 ---> 8进制数 (2)2进制数 ---> 10进制数 (3)2进制数 ---> 16进制数 (0)返回上级目录
时间: 2023-12-03 13:47:01 浏览: 37
下面是代码实现:
```cpp
#include <iostream>
#include <sstream>
#include <string>
#include <cmath>
using namespace std;
// 将二进制数转换为八进制数
string binToOct(string bin) {
int len = bin.length();
int group = len / 3;
if (len % 3 != 0) {
group++;
}
int padLen = group * 3 - len;
bin.insert(0, padLen, '0');
stringstream ss;
for (int i = 0; i < group; i++) {
int value = 0;
for (int j = 0; j < 3; j++) {
value += (bin[i * 3 + j] - '0') * pow(2, 2 - j);
}
ss << value;
}
return ss.str();
}
// 将二进制数转换为十进制数
int binToDec(string bin) {
int len = bin.length();
int result = 0;
for (int i = 0; i < len; i++) {
result += (bin[i] - '0') * pow(2, len - 1 - i);
}
return result;
}
// 将二进制数转换为十六进制数
string binToHex(string bin) {
int len = bin.length();
int group = len / 4;
if (len % 4 != 0) {
group++;
}
int padLen = group * 4 - len;
bin.insert(0, padLen, '0');
stringstream ss;
for (int i = 0; i < group; i++) {
int value = 0;
for (int j = 0; j < 4; j++) {
value += (bin[i * 4 + j] - '0') * pow(2, 3 - j);
}
if (value < 10) {
ss << value;
} else {
ss << (char)(value - 10 + 'A');
}
}
return ss.str();
}
// 将八进制数转换为二进制数
string octToBin(string oct) {
int len = oct.length();
stringstream ss;
for (int i = 0; i < len; i++) {
int value = oct[i] - '0';
string bin;
while (value != 0) {
bin.insert(0, 1, (value % 2) + '0');
value /= 2;
}
if (i != 0) {
int padLen = 3 - bin.length();
bin.insert(0, padLen, '0');
}
ss << bin;
}
return ss.str();
}
// 将八进制数转换为十进制数
int octToDec(string oct) {
int len = oct.length();
int result = 0;
for (int i = 0; i < len; i++) {
result += (oct[i] - '0') * pow(8, len - 1 - i);
}
return result;
}
// 将八进制数转换为十六进制数
string octToHex(string oct) {
string bin = octToBin(oct);
return binToHex(bin);
}
// 将十进制数转换为二进制数
string decToBin(int dec) {
stringstream ss;
while (dec != 0) {
ss << (dec % 2);
dec /= 2;
}
string bin = ss.str();
reverse(bin.begin(), bin.end());
return bin;
}
// 将十进制数转换为八进制数
string decToOct(int dec) {
stringstream ss;
while (dec != 0) {
ss << (dec % 8);
dec /= 8;
}
string oct = ss.str();
reverse(oct.begin(), oct.end());
return oct;
}
// 将十进制数转换为十六进制数
string decToHex(int dec) {
stringstream ss;
while (dec != 0) {
int value = dec % 16;
if (value < 10) {
ss << value;
} else {
ss << (char)(value - 10 + 'A');
}
dec /= 16;
}
string hex = ss.str();
reverse(hex.begin(), hex.end());
return hex;
}
// 将十六进制数转换为二进制数
string hexToBin(string hex) {
int len = hex.length();
stringstream ss;
for (int i = 0; i < len; i++) {
int value;
if (hex[i] >= '0' && hex[i] <= '9') {
value = hex[i] - '0';
} else if (hex[i] >= 'A' && hex[i] <= 'F') {
value = hex[i] - 'A' + 10;
} else {
value = hex[i] - 'a' + 10;
}
string bin;
while (value != 0) {
bin.insert(0, 1, (value % 2) + '0');
value /= 2;
}
if (i != 0) {
int padLen = 4 - bin.length();
bin.insert(0, padLen, '0');
}
ss << bin;
}
return ss.str();
}
// 将十六进制数转换为八进制数
string hexToOct(string hex) {
string bin = hexToBin(hex);
return binToOct(bin);
}
// 将十六进制数转换为十进制数
int hexToDec(string hex) {
int len = hex.length();
int result = 0;
for (int i = 0; i < len; i++) {
int value;
if (hex[i] >= '0' && hex[i] <= '9') {
value = hex[i] - '0';
} else if (hex[i] >= 'A' && hex[i] <= 'F') {
value = hex[i] - 'A' + 10;
} else {
value = hex[i] - 'a' + 10;
}
result += value * pow(16, len - 1 - i);
}
return result;
}
int main() {
int choice1 = -1;
while (choice1 != 0) {
cout << "一级菜单:" << endl;
cout << "(1)2进制数转换" << endl;
cout << "(2)8进制数转换" << endl;
cout << "(3)10进制数转换" << endl;
cout << "(4)16进制数转换" << endl;
cout << "(0)退出" << endl;
cout << "请选择:";
cin >> choice1;
switch (choice1) {
case 1: {
int choice2 = -1;
string bin;
while (choice2 != 0) {
cout << "二级菜单:" << endl;
cout << "(1)2进制数 ---> 8进制数" << endl;
cout << "(2)2进制数 ---> 10进制数" << endl;
cout << "(3)2进制数 ---> 16进制数" << endl;
cout << "(0)返回上级目录" << endl;
cout << "请选择:";
cin >> choice2;
switch (choice2) {
case 1: {
cout << "请输入二进制数:";
cin >> bin;
cout << bin << "(2) = " << binToOct(bin) << "(8)" << endl;
break;
}
case 2: {
cout << "请输入二进制数:";
cin >> bin;
cout << bin << "(2) = " << binToDec(bin) << "(10)" << endl;
break;
}
case 3: {
cout << "请输入二进制数:";
cin >> bin;
cout << bin << "(2) = " << binToHex(bin) << "(16)" << endl;
break;
}
case 0: {
break;
}
default: {
cout << "输入错误,请重新选择!" << endl;
break;
}
}
}
break;
}
case 2: {
int choice2 = -1;
string oct;
while (choice2 != 0) {
cout << "二级菜单:" << endl;
cout << "(1)8进制数 ---> 2进制数" << endl;
cout << "(2)8进制数 ---> 10进制数" << endl;
cout << "(3)8进制数 ---> 16进制数" << endl;
cout << "(0)返回上级目录" << endl;
cout << "请选择:";
cin >> choice2;
switch (choice2) {
case 1: {
cout << "请输入八进制数:";
cin >> oct;
cout << oct << "(8) = " << octToBin(oct) << "(2)" << endl;
break;
}
case 2: {
cout << "请输入八进制数:";
cin >> oct;
cout << oct << "(8) = " << octToDec(oct) << "(10)" << endl;
break;
}
case 3: {
cout << "请输入八进制数:";
cin >> oct;
cout << oct << "(8) = " << octToHex(oct) << "(16)" << endl;
break;
}
case 0: {
break;
}
default: {
cout << "输入错误,请重新选择!" << endl;
break;
}
}
}
break;
}
case 3: {
int choice2 = -1;
int dec;
while (choice2 != 0) {
cout << "二级菜单:" << endl;
cout << "(1)10进制数 ---> 2进制数" << endl;
cout << "(2)10进制数 ---> 8进制数" << endl;
cout << "(3)10进制数 ---> 16进制数" << endl;
cout << "(0)返回上级目录" << endl;
cout << "请选择:";
cin >> choice2;
switch (choice2) {
case 1: {
cout << "请输入十进制数:";
cin >> dec;
cout << dec << "(10) = " << decToBin(dec) << "(2)" << endl;
break;
}
case 2: {
cout << "请输入十进制数:";
cin >> dec;
cout << dec << "(10) = " << decToOct(dec) << "(8)" << endl;
break;
}
case 3: {
cout << "请输入十进制数:";
cin >> dec;
cout << dec << "(10) = " << decToHex(dec) << "(16)" << endl;
break;
}
case 0: {
break;
}
default: {
cout << "输入错误,请重新选择!" << endl;
break;
}
}
}
break;
}
case 4: {
int choice2 = -1;
string hex;
while (choice2 != 0) {
cout << "二级菜单:" << endl;
cout << "(1)16进制数 ---> 2进制数" << endl;
cout << "(2)16进制数 ---> 8进制数" << endl;
cout << "(3)16进制数 ---> 10进制数" << endl;
cout << "(0)返回上级目录" << endl;
cout << "请选择:";
cin >> choice2;
switch (choice2) {
case 1: {
cout << "请输入十六进制数:";
cin >> hex;
cout << hex << "(16) = " << hexToBin(hex) << "(2)" << endl;
break;
}
case 2: {
cout << "请输入十六进制数:";
cin >> hex;
cout << hex << "(16) = " << hexToOct(hex) << "(8)" << endl;
break;
}
case 3: {
cout << "请输入十六进制数:";
cin >> hex;
cout << hex << "(16) = " << hexToDec(hex) << "(10)" << endl;
break;
}
case 0: {
break;
}
default: {
cout << "输入错误,请重新选择!" << endl;
break;
}
}
}
break;
}
case 0: {
break;
}
default: {
cout << "输入错误,请重新选择!" << endl;
break;
}
}
}
return 0;
}
```
这个程序支持从二进制、八进制、十进制和十六进制之间相互转换,并且提供了菜单界面方便用户选择。其中,每个进制下有三个选项,分别是转换成另外三种进制中的一种。