二进制反码转换问题| 豆包MarsCode AI

57 阅读1分钟

问题描述

小C在学习二进制运算,他了解到每个非负整数都有其二进制表示。例如,整数 5 可以被表示为二进制 "101",整数 11 可以被表示为二进制 "1011",并且除了 N = 0 外,任何二进制表示中都不含前导零。

二进制的反码表示是将每个 1 变为 0,每个 0 变为 1。例如,二进制数 "101" 的二进制反码为 "010"。现在小C想知道,给定一个十进制数 N,它的二进制反码对应的十进制数是多少。


测试样例

样例1:

输入:N = 5 输出:2

样例2:

输入:N = 10 输出:5

样例3:

输入:N = 0 输出:1

这是一道还是很简单的题目,主要思路就是,先把这个数字转化为字符串类型的二进制,在用字符串进行计算,数据很小,直接计算即可

代码如下:

#include <bits/stdc++.h>
using namespace std;
int solution(int N) {
    if(N==0){
        return 1;
    }
    string s;
    while (N) {
        s.push_back(N%2 + '0');
        N /= 2;
    }
    for(auto &it : s){
        if(it == '0'){
            it = '1';
        }else {
            it = '0';        
        }
    }
    int ans = 0;
    for(int i = 0 ; i < s.size() ; i ++){
        if(s[i] == '1') ans += pow(2,i);
    }
    return ans; // Placeholder return
}
​
int main() {
    std::cout << (solution(5) == 2) << std::endl;
    std::cout << (solution(10) == 5) << std::endl;
    std::cout << (solution(0) == 1) << std::endl;
    return 0;
}