给定一个正整数,输出它的补数。补数是将原先数字的二进制表示按位取反,再换回十进制后得到的新数。
样例1:
输入:5
输出:2
说明:5的二进制表示为101(不包含前导零),它的补数为010,因此你需要输出2。
样例2:
输入:1
输出:0
说明:1的二进制表示为1(不包含前导零),它的补数为0,因此你需要输出0。
思路:将num转化为二进制,并将其二进制取反,之后注意直接从string的后面开始取,最后一个的次数为0.
class Solution {
public:
/**
* @param num: an integer
* @return: the complement number
*/
int findComplement(int num) {
// Write your code here
string temp="";
int result=0;
while(num)
{
int ch=num%2;
num/=2;
if(ch==0) temp.insert(temp.begin(),'1');
else temp.insert(temp.begin(),'0');
}
for (int i = temp.size()-1,cnt=0; i >= 0; i--,cnt++) {
/* code */
result+=(temp[i]-'0')*pow(2,cnt);
}
return result;
}
};