数据结构实验,利用栈实现二进制,八进制,十进制,十六进制之间的转换,写出完整代码
时间: 2023-07-31 22:11:24 浏览: 62
以下是使用栈实现进制转换的完整代码,包括二进制、八进制、十进制和十六进制之间的转换。
```c++
#include <iostream>
#include <stack>
#include <cmath>
using namespace std;
// 将十进制数转换为二进制数
void DecToBin(int n)
{
stack<int> s;
while (n > 0)
{
int remainder = n % 2;
s.push(remainder);
n /= 2;
}
while (!s.empty())
{
cout << s.top();
s.pop();
}
}
// 将十进制数转换为八进制数
void DecToOct(int n)
{
stack<int> s;
while (n > 0)
{
int remainder = n % 8;
s.push(remainder);
n /= 8;
}
while (!s.empty())
{
cout << s.top();
s.pop();
}
}
// 将十进制数转换为十六进制数
void DecToHex(int n)
{
stack<char> s;
while (n > 0)
{
int remainder = n % 16;
if (remainder < 10)
s.push(remainder + '0');
else
s.push(remainder - 10 + 'A');
n /= 16;
}
while (!s.empty())
{
cout << s.top();
s.pop();
}
}
// 将二进制数转换为十进制数
void BinToDec(int n)
{
int decimal = 0;
int base = 1;
while (n > 0)
{
int remainder = n % 10;
decimal += remainder * base;
base *= 2;
n /= 10;
}
cout << decimal;
}
// 将八进制数转换为十进制数
void OctToDec(int n)
{
int decimal = 0;
int base = 1;
while (n > 0)
{
int remainder = n % 10;
decimal += remainder * base;
base *= 8;
n /= 10;
}
cout << decimal;
}
// 将十六进制数转换为十进制数
void HexToDec(string hex)
{
int decimal = 0;
int base = 1;
int len = hex.size();
for (int i = len - 1; i >= 0; i--)
{
if (hex[i] >= '0' && hex[i] <= '9')
decimal += (hex[i] - '0') * base;
else if (hex[i] >= 'A' && hex[i] <= 'F')
decimal += (hex[i] - 'A' + 10) * base;
base *= 16;
}
cout << decimal;
}
int main()
{
int n, choice;
string hex;
cout << "请输入一个整数: ";
cin >> n;
cout << "请选择需要转换的进制:" << endl;
cout << "1. 十进制转二进制" << endl;
cout << "2. 十进制转八进制" << endl;
cout << "3. 十进制转十六进制" << endl;
cout << "4. 二进制转十进制" << endl;
cout << "5. 八进制转十进制" << endl;
cout << "6. 十六进制转十进制" << endl;
cin >> choice;
switch (choice)
{
case 1:
DecToBin(n);
break;
case 2:
DecToOct(n);
break;
case 3:
DecToHex(n);
break;
case 4:
BinToDec(n);
break;
case 5:
OctToDec(n);
break;
case 6:
cout << "请输入一个十六进制数: ";
cin >> hex;
HexToDec(hex);
break;
default:
cout << "无效的选项" << endl;
break;
}
return 0;
}
```
在程序中,我们使用了 STL 中的 `stack` 数据结构,它可以帮助我们方便地实现栈的操作。对于不同的进制转换,我们需要分别实现不同的函数,并在 `main` 函数中根据用户的选择调用相应的函数。对于十六进制转换,由于它包含字母,我们使用了 `stack<char>` 来存储每一位的值。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)