递归任意进制转任意进制c++
时间: 2024-08-27 12:02:06 浏览: 39
支持任意大的16进制转10进制例程.rar
在C++中,递归可以用来实现任意进制之间的转换,通常我们会先将数值从一种进制分解成数字和权值的形式,然后逐位处理。下面是一个基本的递归函数示例,用于将十进制数转换为任意其他进制:
```cpp
#include <iostream>
#include <string>
// 定义通用的递归函数,输入是原数、当前位索引、目标进制
std::string convertDecimalToAnyBase(int number, int base, std::string result) {
if (number == 0) return result; // 递归结束条件
// 计算当前位的字符并添加到结果字符串
char digit = static_cast<char>((number % base) + '0'); // 保证0-9字符范围
result = digit + result;
// 继续递归处理下一位
return convertDecimalToAnyBase(number / base, base, result);
}
// 主函数,接受用户输入的源和目标进制,以及待转换的十进制数
std::string decimalToBase(int decimal, int fromBase, int toBase) {
std::string result;
if (decimal < 0 || fromBase <= 1 || fromBase > 36 || toBase <= 1 || toBase > 36) {
throw std::invalid_argument("Invalid base value.");
}
result = convertDecimalToAnyBase(decimal, fromBase, "");
return result;
}
int main() {
int decimalNumber;
int sourceBase, targetBase;
std::cout << "Enter the decimal number: ";
std::cin >> decimalNumber;
std::cout << "Enter the current base (2-36): ";
std::cin >> sourceBase;
std::cout << "Enter the target base (2-36): ";
std::cin >> targetBase;
try {
std::string convertedNumber = decimalToBase(decimalNumber, sourceBase, targetBase);
std::cout << "Converted number in base " << targetBase << ": " << convertedNumber << std::endl;
} catch (const std::invalid_argument& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
在这个例子中,`decimalToBase`函数会根据用户输入的源进制和目标进制调用`convertDecimalToAnyBase`递归函数。注意,由于C++默认整数类型的限制,这里假设用户输入的进制小于等于36,因为字母'a'-'z'也对应于10-35。
阅读全文