476. Number Complement
题目描述:
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
给定一个正整数,输出其补数。 补码策略是翻转其二进制表示的位。
Note:(数据范围)
The given integer is guaranteed to fit within the range of a 32-bit signed integer.
You could assume no leading zero bit in the integer’s binary representation.
Example 1:
Input: 5
Output: 2
Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
Example 2:
Input: 1
Output: 0
Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.
代码如下:(C++)
class Solution {
public:
int findComplement(int num) {
int y = 0;
if(num == 0)
return 1;
int c = 1;
while(num != 0)
{
int a = num%2;
int b = a>0?0:1;
y += b*c;
c *=2;
num = num / 2;
}
return y;
}
};
遇到的问题:
1.智障的我把第5行if条件写成了单等号,调试很久都是错误的,显示不出正确结果,该打。
2.二进制转换为十进制用 y=a0* 2^0 +a1* 2^1 +a2* 2^2 +a3* 2^3 +a4* 2^4 + … (此时2^0表示2的0次方)
2的n次方在代码中用c来表示,b用三元运算符直接翻转其二进制表示的位.