问题描述
小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;
}