一、题目
函数原型:
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
相关推荐
Tanecious.2 小时前
初阶数据结构--排序算法(全解析!!!)hu_yuchen3 小时前
C++:Lambda表达式烨然若神人~4 小时前
算法训练营第五天 | 454.四数相加II\ 383. 赎金信\15. 三数之和\ 18. 四数之和一只鱼^_4 小时前
牛客周赛 Round 91啊阿狸不会拉杆4 小时前
人工智能数学基础(三):微积分初步2401_858286114 小时前
CC52.【C++ Cont】滑动窗口mvufi5 小时前
day31 第八章 贪心算法 part05珊瑚里的鱼6 小时前
第一讲 | 算法复杂度啊阿狸不会拉杆6 小时前
人工智能数学基础(四):线性代数玖剹6 小时前
矩阵区域和 --- 前缀和