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;
}
相关推荐
xin_nai12 小时前
LeetCode热题100(Java)(3)滑动窗口
算法·leetcode·滑动窗口
黎阳之光13 小时前
视频孪生赋能智慧能源园区:黎阳之光打造全域数智化新标杆
大数据·人工智能·算法·安全·数字孪生
yyy(十一月限定版)13 小时前
ACM&OJ最终选拔赛
算法
啦啦啦_999913 小时前
1. 线性回归之 导数偏导数
算法·矩阵·线性回归
踩坑记录13 小时前
leetcode hot100 5. 最长回文子串 中心扩展法 medium
leetcode
雨季mo浅忆13 小时前
模拟面试梳理
面试·职场和发展
itzixiao13 小时前
L1-058 6翻了(15分)[java][python]
java·开发语言·python·算法
念何架构之路13 小时前
数组和切片实战
数据结构·算法·排序算法
重生之我是Java开发战士13 小时前
【数据结构】AVL树解析
数据结构·算法
小π军13 小时前
STL之multiset 常见API介绍
数据结构·c++·算法