476. Number Complement

来源:互联网 发布:重庆外包seo找谁好 编辑:程序博客网 时间:2024/06/06 11:46

求一个数的complement number.
input=5 output=2
input=2 output=1
由于2^2<=5<2^3,二进制表示输出为111-101=2.
由于2^1<=2<2^2,二进制表示输出为11-10=1.

int findComplement(int num) {     int i=0;     while(pow(2,i)<=num) i++;     return pow(2,i)-num-1; }

解法2

int findComplement(int num) {    int temp = num, mask = 1;    while(temp){        temp >>= 1;        mask <<= 1;    } return ((mask - 1) ^ num);}

原理类似,左移相当于乘2,右移相当于除2.目的在于找到比num刚好多一位的最小二进制整数。

原创粉丝点击