LeetCode 476题目解答:给定一个正整数,输出其补数。 补码策略是翻转其二进制表示的位。
代码如下:(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用三元运算符直接翻转其二进制表示的位。