编写一个程序exp3-1.cpp,利用顺序栈求各种进制之间的转换。二进制转十进制、八进制、十六进制和十进制转二进制。
时间: 2023-05-19 11:03:51 浏览: 112
好的,这是一个编程类的问题,我可以回答。以下是exp3-1.cpp的代码:
```c++
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
// 将字符转换为数字
int charToInt(char c) {
if (c >= '0' && c <= '9') {
return c - '0';
} else if (c >= 'A' && c <= 'F') {
return c - 'A' + 10;
} else if (c >= 'a' && c <= 'f') {
return c - 'a' + 10;
} else {
return -1;
}
}
// 将数字转换为字符
char intToChar(int n) {
if (n >= 0 && n <= 9) {
return n + '0';
} else if (n >= 10 && n <= 15) {
return n - 10 + 'A';
} else {
return ' ';
}
}
// 十进制转换为其他进制
void decimalToOther(int n, int base) {
stack<char> s;
while (n != 0) {
s.push(intToChar(n % base));
n /= base;
}
while (!s.empty()) {
cout << s.top();
s.pop();
}
}
// 其他进制转换为十进制
void otherToDecimal(string str, int base) {
int n = 0;
for (int i = 0; i < str.length(); i++) {
int digit = charToInt(str[i]);
if (digit < 0 || digit >= base) {
cout << "输入错误!" << endl;
return;
}
n = n * base + digit;
}
cout << n;
}
int main() {
int n, base;
string str;
cout << "请输入一个十进制数:";
cin >> n;
cout << "转换为二进制:";
decimalToOther(n, 2);
cout << endl << "转换为八进制:";
decimalToOther(n, 8);
cout << endl << "转换为十六进制:";
decimalToOther(n, 16);
cout << endl << "请输入一个二进制数:";
cin >> str;
cout << "转换为十进制:";
otherToDecimal(str, 2);
cout << endl;
return 0;
}
```
这个程序可以实现十进制与二进制、八进制、十六进制之间的转换。
阅读全文