利用栈实现整数的十进制转八进制的C++ 代码
时间: 2024-01-22 09:18:00 浏览: 21
以下是利用栈实现整数的十进制转八进制的 C++ 代码:
```c++
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> s;
int n;
cout << "Enter a decimal number: ";
cin >> n;
while (n > 0) {
s.push(n % 8);
n /= 8;
}
cout << "Octal number: ";
while (!s.empty()) {
cout << s.top();
s.pop();
}
cout << endl;
return 0;
}
```
运行截图如下:
```
Enter a decimal number: 123
Octal number: 173
```
相关问题
c++十进制转换成八进制
以下是一个C++程序,用于将十进制数转换为八进制数:
```cpp
#include <iostream>
#include <cstring>
#include <algorithm>
#include <iomanip>
using namespace std;
void f(int a){
if(a < 8)
cout << a;
else{
f(a/8);
cout << a%8;
}
}
int main(){
int a;
cin >> a;
f(a);
return 0;
}
```
这个程序使用递归的方式将十进制数转换为八进制数。首先,我们定义了一个函数`f`,它接受一个整数参数`a`。如果`a`小于8,则直接输出`a`。否则,我们将`a`除以8并递归调用函数`f`,然后输出`a`除以8的余数。这样就可以将十进制数转换为八进制数。
你可以在程序中输入一个正整数,然后程序将输出对应的八进制数。
数据结构实验,利用栈实现二进制,八进制,十进制,十六进制之间的转换,写出完整代码
以下是使用栈实现进制转换的完整代码,包括二进制、八进制、十进制和十六进制之间的转换。
```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>` 来存储每一位的值。