leetcode:476. 数字的补数

一、题目

476. 数字的补数 - 力扣(LeetCode)

函数原型:

int findComplement(int num)
二、思路

将num的每一位取出来,取反后,乘以2的位次方,最终所有结果相加即可得到结果。

++如何取出num的每一位?++

num&1:取出num的最低位

num>>1:num算数右移1,最高位补符号位(由于num为整数,所以最高位补0)

++如何将取出的每一位取反?++

(num&1)^1:按位异或1,如果是0则取反为1,如果是1则取反为0
三、代码

cpp 复制代码
int findComplement(int num) {
    int result=0;
    int i=0;
    while(num)
    {
        result+=pow(2,i)*(num&1^1);
        i++;
        num=num>>1;
    }
    return result;
}
相关推荐
Rhystt17 小时前
代码随想录算法训练营第六十天|多余的边?从基础到进阶!
开发语言·c++·算法·图论
2301_8101609518 小时前
C++中的策略模式进阶
开发语言·c++·算法
keep intensify18 小时前
二叉树的直径
数据结构·算法·深度优先
keep intensify18 小时前
单源最短路径
数据结构·c++·算法
2401_8735449218 小时前
分布式缓存一致性
开发语言·c++·算法
香芋超新星18 小时前
反转字符串中的小写字母
算法
篮l球场18 小时前
数组中的第K个最大元素
数据结构·算法·leetcode
月落归舟18 小时前
排序算法---(三)
数据结构·算法·排序算法
njidf18 小时前
C++中的观察者模式
开发语言·c++·算法
2301_8227828218 小时前
C语言数组通关攻略!从一维到字符数组,零基础也能轻松掌握
c语言·算法·数组·编程基础·避坑技巧