一、题目
函数原型:
int findComplement(int num)
二、思路将num的每一位取出来,取反后,乘以2的位次方,最终所有结果相加即可得到结果。
++如何取出num的每一位?++
num&1:取出num的最低位
num>>1:num算数右移1,最高位补符号位(由于num为整数,所以最高位补0)
++如何将取出的每一位取反?++
(num&1)^1:按位异或1,如果是0则取反为1,如果是1则取反为0
三、代码
cppint findComplement(int num) { int result=0; int i=0; while(num) { result+=pow(2,i)*(num&1^1); i++; num=num>>1; } return result; }
leetcode:476. 数字的补数
南林yan2023-11-16 17:34
相关推荐
Nil2082 分钟前
leetcode 118杨辉三角wanderist.2 小时前
线性筛法详解:从筛质数到欧拉函数、Möbius 函数与约数函数All for pursuit.2 小时前
【设计-1】208.实现Trie (前缀树)weixin_307779133 小时前
C++代码实现MATLAB中的crossval函数功能青少儿编程课堂3 小时前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门光影少年3 小时前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?HEJOO93 小时前
Linux 设备驱动系列——使用全局工作队列Code_Solitude4 小时前
c语言:递归我命由我123454 小时前
Photoshop - Photoshop 使用内容识别填充移除对象edtoplort5 小时前
OpenAI紧急叫停GPT-6.1 Astra训练,奥尔特曼为何踩刹车