【leetcode】数字的补数c++

题目描述:

对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。

例如,整数 5 的二进制表示是 “101” ,取反后得到 “010” ,再转回十进制表示得到补数 2 。
给你一个整数 num ,输出它的补数。

示例1:

输入:num = 5
输出:2
解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。

示例2:

输入:num = 1
输出:0
解释:1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。

提示:

1 <= num < 231

代码:

class Solution {
public:
    int findComplement(int num) {
        int a=0,i=0,num2=0;
        while(num!=0){ //得到二进制的每一位
            a=(num%2+1)%2; //num%2是二进制的每一位,((num%2)+1)%2取反
            num=num/2;
            num2=num2+a*pow(2,i); //转为10进制 
            i++;
        }
        return num2;
    }
};

在这里插入图片描述
注意:

补数:10进制数的2进制按位取反得到补数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值