一、题目
函数原型:
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
相关推荐
yuan1999712 小时前
基于 MATLAB PSO 工具箱的函数寻优算法YUANQIANG202412 小时前
博弈论中势函数与势博弈构造:为什么看似 “先射箭后画靶”WBluuue12 小时前
Codeforces 1096 Div3(ABCDEFGH)wanzehongsheng12 小时前
基于天文算法的双轴太阳能追踪系统:从原理到工程实现basketball61612 小时前
Kadane算法 C++实现handler0113 小时前
【C++】二叉搜索树详解及其模拟实现(代码)luj_176813 小时前
残熵算法的稳健防灾逻辑玖釉-13 小时前
二叉树基础详解:TreeNode、buildTree、deleteTree 与 printTree 的实现原理(C++)Severus_black13 小时前
【初阶数据结构与算法】八大排序之非比较排序(计数排序),一次性讲清!罗西的思考13 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (4)--- 系统架构