一、题目
函数原型:
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
相关推荐
米尔的可达鸭40 分钟前
深入操作系统 Socket 底层:套接字控制块、FD映射、阻塞IO核心完整实现tachibana21 小时前
hot100 课程表(207)神仙别闹1 小时前
编写基于C++ Huffman 算法的无损压缩程序和解压程序大鱼>1 小时前
宠物活动轨迹追踪系统:GPS/BDS+UWB+BLE多定位融合方案旖-旎1 小时前
《LeetCode 646 最长数对链 || LeetCode 1143 最长公共子序列》Frostnova丶2 小时前
(15)LeetCode 189. 轮转数组Lumos1862 小时前
故障保护与鲁棒性(十七)手写码匠2 小时前
从零实现大模型推理引擎:Continuous Batching 与动态调度系统深度解析wabs6663 小时前
关于单调栈【力扣503.下一个更大元素II的思考】c238563 小时前
下篇:伸缩魔法!进阶吃透可变滑动窗口篇