面试题答案
一键面试#include <iostream>
#include <string>
#include <cmath>
// 十进制整数到二进制字符串的转换
std::string decimalToBinary(int decimal) {
if (decimal == 0) return "0";
bool isNegative = decimal < 0;
if (isNegative) decimal = -decimal;
std::string binary;
while (decimal > 0) {
binary = (decimal % 2 == 0? "0" : "1") + binary;
decimal /= 2;
}
if (isNegative) {
// 补码转换
for (auto& bit : binary) {
bit = bit == '0'? '1' : '0';
}
int carry = 1;
for (auto it = binary.rbegin(); it != binary.rend(); ++it) {
if (*it == '0' && carry) {
*it = '1';
carry = 0;
} else if (*it == '1' && carry) {
*it = '0';
}
}
if (carry) binary = "1" + binary;
}
return binary;
}
// 二进制字符串到十进制整数的转换
int binaryToDecimal(const std::string& binary) {
bool isNegative = binary[0] == '1';
int decimal = 0;
for (size_t i = isNegative? 1 : 0; i < binary.size(); ++i) {
decimal += (binary[i] - '0') * std::pow(2, binary.size() - 1 - i);
}
if (isNegative) decimal = -decimal;
return decimal;
}
你可以使用以下方式测试这些函数:
int main() {
int decimal = -10;
std::string binary = decimalToBinary(decimal);
std::cout << decimal << " 的二进制表示为: " << binary << std::endl;
int result = binaryToDecimal(binary);
std::cout << binary << " 的十进制表示为: " << result << std::endl;
return 0;
}