一、题目
函数原型:
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
相关推荐
We་ct1 天前
LeetCode 5. 最长回文子串:DP + 中心扩展王老师青少年编程1 天前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子叼烟扛炮1 天前
C++第二讲:类和对象(上)天疆说1 天前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数wuweijianlove1 天前
关于算法设计中的代价函数优化与约束求解的技术7小程故事多_801 天前
[大模型面试系列] 多轮对话 Agent 设计实战(含窗口优化 + 工具调用精髓)leoufung1 天前
LeetCode 149: Max Points on a Line - 解题思路详解样例过了就是过了1 天前
LeetCode热题100 最长公共子序列HXDGCL1 天前
矩形环形导轨:自动化循环线的核心运动单元解析谭欣辰1 天前
C++ 排列组合完整指南