面试题答案
一键面试#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
class NumberConverter {
public:
// 将十进制数转换为十六进制字符串
static std::string decimalToHexadecimal(int decimal) {
return decimalToBase(decimal, 16);
}
// 将十六进制字符串转换回十进制数
static int hexadecimalToDecimal(const std::string& hexadecimal) {
return baseToDecimal(hexadecimal, 16);
}
// 将十进制数转换为任意进制(2 - 36进制)的字符串表示
static std::string decimalToBase(int decimal, int base) {
if (base < 2 || base > 36) {
throw std::invalid_argument("Base must be between 2 and 36");
}
if (decimal == 0) return "0";
bool isNegative = decimal < 0;
if (isNegative) decimal = -decimal;
std::string result;
while (decimal > 0) {
int remainder = decimal % base;
result += remainder < 10? '0' + remainder : 'A' + remainder - 10;
decimal /= base;
}
if (isNegative) result += '-';
std::reverse(result.begin(), result.end());
return result;
}
// 将任意进制(2 - 36进制)的字符串表示转换回十进制数
static int baseToDecimal(const std::string& number, int base) {
if (base < 2 || base > 36) {
throw std::invalid_argument("Base must be between 2 and 36");
}
bool isNegative = number[0] == '-';
int startIndex = isNegative? 1 : 0;
int result = 0;
for (size_t i = startIndex; i < number.length(); ++i) {
int digit = number[i] >= '0' && number[i] <= '9'? number[i] - '0' :
number[i] >= 'A' && number[i] <= 'Z'? number[i] - 'A' + 10 :
number[i] >= 'a' && number[i] <= 'z'? number[i] - 'a' + 10 : -1;
if (digit == -1 || digit >= base) {
throw std::invalid_argument("Invalid digit for given base");
}
result = result * base + digit;
}
return isNegative? -result : result;
}
};
你可以这样使用这个类:
int main() {
try {
std::cout << "10进制转16进制: " << NumberConverter::decimalToHexadecimal(42) << std::endl;
std::cout << "16进制转10进制: " << NumberConverter::hexadecimalToDecimal("2A") << std::endl;
std::cout << "10进制转2进制: " << NumberConverter::decimalToBase(42, 2) << std::endl;
std::cout << "2进制转10进制: " << NumberConverter::baseToDecimal("101010", 2) << std::endl;
} catch (const std::exception& e) {
std::cerr << "Exception: " << e.what() << std::endl;
}
return 0;
}
上述代码中,NumberConverter
类提供了以下功能:
decimalToHexadecimal
方法将十进制数转换为十六进制字符串。hexadecimalToDecimal
方法将十六进制字符串转换为十进制数。decimalToBase
方法将十进制数转换为任意进制(2 - 36进制)的字符串表示。baseToDecimal
方法将任意进制(2 - 36进制)的字符串表示转换为十进制数。
在main
函数中展示了这些方法的使用示例,并处理了可能的异常情况。