一、题目
函数原型:
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
相关推荐
地平线开发者1 小时前
征程6工具链模型X86推理方式说明地平线开发者1 小时前
【征程6】校准量化中HistogramObserver解析OuO-22 小时前
笔试强训 Day 34:ISBN 号码、kotori 和迷宫、矩阵最长递增路径程序喵大人3 小时前
【C++进阶】STL算法与函数对象 - 04 find、count和any_of把查询写成意图豆沙沙包?3 小时前
c++中引用(P7-P11)不会代码的小猴4 小时前
标准模板库(STL)ZhouDevin4 小时前
算法论文/高效微调4——DoRA:权重分解的低秩适配方法evans在进步4 小时前
LeetCode 200:岛屿数量——Java DFS 染色法详解AI探索先锋4 小时前
A* 路径规划:四种算法的进化史-学习旖旎夜光4 小时前
LeetCode 202:快乐数(双指针问题) —— 题解