一、题目
函数原型:
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
相关推荐
为何创造硅基生物29 分钟前
C 语言 typedef 结构体私有化yzx99101332 分钟前
递归算法入门:像俄罗斯套娃一样思考心中有国也有家38 分钟前
从零上手 CANN 学习中心:像逛技术便利店一样学昇腾oo哦哦1 小时前
搜索矩阵系统的最短路密码:用Dijkstra算法和网络流理论,解释为什么你做了1000个关键词,流量还不如别人30个Matlab程序猿小助手1 小时前
【MATLAB源码-第319期】基于matlab的帝王蝶优化算法(MBO)无人机三维路径规划,输出做短路径图和适应度曲线.图码1 小时前
二分查找进阶:如何在有序数组中快速找到Upper Bound?试剂界的爱马仕1 小时前
《古董局·终局5:潮生》第 2 章:镜子的天赋Cthy_hy1 小时前
树状数组(BIT)进阶:差分优化实现区间修改、区间查询YsyaaabB2 小时前
ACM 模式通用代码模板ComputerInBook2 小时前
Euclid 几何变换——仿射(affine)变换