实现十进制数与任意 制(2-16之间进制)的数之间的数 制转换。使用c++ 用栈实现
时间: 2024-10-12 20:10:53 浏览: 44
在C++中,使用栈数据结构可以有效地实现十进制数到其他任意位数进制(如二进制、八进制、十六进制等)的转换。这里我们采用分治策略,逐步将十进制数值分解成各个低位的值。
首先,我们需要包含必要的头文件并定义一些辅助函数:
```cpp
#include <iostream>
#include <stack>
#include <string>
// 辅助函数,用于获取给定进制下对应的字符
char getChar(int num, int base) {
if (num >= 0 && num < base) {
return '0' + num;
}
// 如果超过base,添加字母A-F或a-f代表10-15
if (base == 16 && num >= 10) {
return 'A' - 10 + num % 16;
}
throw std::runtime_error("Number too large for given base.");
}
// 递归函数,将十进制数转换为指定进制字符串
std::string convertToBase(int decimal, int base) {
std::stack<char> digits;
while (decimal > 0) {
digits.push(getChar(decimal % base, base));
decimal /= base;
}
// 从栈顶开始构造结果字符串
std::string result;
while (!digits.empty()) {
result = digits.top() + result;
digits.pop();
}
return result;
}
int main() {
int decimal_num;
int base;
// 输入十进制数和目标进制
std::cout << "Enter the decimal number: ";
std::cin >> decimal_num;
std::cout << "Enter the base (2 to 16): ";
std::cin >> base;
try {
std::string converted_num = convertToBase(decimal_num, base);
std::cout << "The converted number in " << base << " base is: " << converted_num << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
在这个程序中,`convertToBase` 函数将十进制数转换成指定进制的字符串,并使用 `getChar` 函数处理每一位的字符。如果输入的数字过大无法表示,我们会抛出异常。
运行此程序,用户可以输入十进制数和想要转换的进制,然后会得到相应的转换结果。
阅读全文