MST

星途 面试题库

面试题:C++实现十进制与二进制相互转换

请用C++编写一个函数,实现十进制整数到二进制字符串的转换,以及另一个函数实现二进制字符串到十进制整数的转换。要求考虑正负数情况,代码需简洁明了且逻辑正确。
17.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#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;
}