LeetCode 1009. 十进制整数的反码
原题链接
简单
作者:
胡歌-此生不换
,
2022-09-23 23:08:58
,
所有人可见
,
阅读 106
class Solution {
public:
int findComplement(int n)
{
if(n == 1) return 0; // 正数的 原码 == 反码 == 补码
// string ans;
vector<int> ans;
while(n > 0) // 根据 10 进制数得到二进制0 1串
{
int t = n & 1;
// ans += to_string(t);
ans.push_back(t);
n = (n - t) / 2;
}
// reverse(ans.begin(), ans.end()); // 得到反码
for(int i = 0; i < ans.size(); i++)
if(ans[i] == 0) ans[i] = 1;
else ans[i] = 0;
// for(int i = 0; i < ans.size(); i++) cout << ans[i];
int res = ans[0];
for(int i = 1; i < ans.size(); i++) // 根据二进制串得 10 进制数
if(ans[i] == 1) res += 1 << i; // res 加上每一个二进制位(1 << i)
// if(ans[i] == 1) res = res * 2 + ans[i];
return res;
}
};