C++ 实现
标准库转换方法
1. 使用标准转换函数
#include <iostream>
#include <string>
#include <bitset>
class NumberConverter {
public:
// 十进制转二进制
static std::string decimalToBinary(int decimal) {
return std::bitset<32>(decimal).to_string();
}
// 二进制转十进制
static int binaryToDecimal(const std::string& binary) {
return std::stoi(binary, nullptr, 2);
}
// 十六进制转换
static int hexToDecimal(const std::string& hex) {
return std::stoi(hex, nullptr, 16);
}
static std::string decimalToHex(int decimal) {
char buffer[20];
sprintf(buffer, "%X", decimal);
return std::string(buffer);
}
};
自定义转换类
综合数制转换器
class AdvancedNumberConverter {
private:
// 字符转数值的实用方法
static int charToValue(char c) {
if (c >= '0' && c <= '9') return c - '0';
if (c >= 'A' && c <= 'F') return c - 'A' + 10;
if (c >= 'a' && c <= 'f') return c - 'a' + 10;
throw std::invalid_argument("无效数字");
}
public:
// 通用的基数转换方法
static int toDecimal(const std::string& number, int base) {
int decimal = 0;
int power = 0;
for (int i = number.length() - 1; i >= 0; --i) {
decimal += charToValue(number[i]) * std::pow(base, power++);
}
return decimal;
}
// 十进制转任意基数
static std::string fromDecimal(int decimal, int base) {
if (decimal == 0) return "0";
const std::string digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::string result;
while (decimal > 0) {
result = digits[decimal % base] + result;
decimal /= base;
}
return result;
}
};
实际实现示例
int main() {
// 转换演示
try {
// 标准转换
std::cout << "十进制转二进制: "
<< NumberConverter::decimalToBinary(42) << std::endl;
// 高级转换
std::cout << "二进制转十进制: "
<< AdvancedNumberConverter::toDecimal("101010", 2) << std::endl;
// 十六进制转换
std::cout << "十六进制转十进制: "
<< AdvancedNumberConverter::toDecimal("2A", 16) << std::endl;
// 十进制转不同基数
std::cout << "十进制 42 转换为三进制: "
<< AdvancedNumberConverter::fromDecimal(42, 3) << std::endl;
}
catch (const std::exception& e) {
std::cerr << "转换错误: " << e.what() << std::endl;
}
return 0;
}
转换方法复杂度
转换类型 |
时间复杂度 |
空间复杂度 |
十进制转任意基数 |
O(log n) |
O(log n) |
任意基数转十进制 |
O(k) |
O(1) |
错误处理策略
graph TD
A[输入验证] --> B{输入有效?}
B -->|是| C[执行转换]
B -->|否| D[抛出异常]
C --> E[返回转换后的值]
D --> F[优雅地处理错误]
最佳实践
- 尽可能使用内置类型转换方法
- 实现健壮的错误处理
- 考虑大数转换时的性能
- 转换前验证输入
编译与执行
在 Ubuntu 22.04 上编译:
g++ -std=c++11 number_converter.cpp -o number_converter
./number_converter
注意:LabEx 建议练习这些实现技术,以掌握 C++ 中的数制转换。