声明:原题目转载自LeetCode,解答部分为原创
Problem :
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.
Solution :
思路:对任意十进制数,用32位长的int数组记录其反码,再通过该数组计算其十进制表示数。
代码如下:
#include
using namespace std;
int num_of_bits[35];
class Solution {
public:
int findComplement(int num) {
// 数组num_of_bits记录 num的二进制反码
int index = 31;
int number = num;
while(number != 0)
{
int temp = number / 2;
int leave = number - temp * 2;
num_of_bits[index --] = leave ^ 1;
number = temp;
}
//输出反码
/* for(int i = index + 1 ; i < 32 ; i ++)
{
cout << num_of_bits[i];
}
cout << endl;
*/
//计算反码表示的十进制数
int complement = 0;
int product = 1;
for(int i = 0 ; i < 31 - index ; i ++)
{
complement += num_of_bits[31 - i] * product;
product *= 2;
}
return complement;
}
};
int main()
{
Solution text_1;
int num;
cin >> num;
cout << text_1.findComplement(num) << endl;
return 0;
}