371. Sum of Two Integers

题目链接: https://leetcode.com/problems/sum-of-two-integers/
思路: 这里用到了一个半加法的思想, 即两位单独的位相加其结果可以用异或得到, 进位可以用与得到. 然后对于两个数字来说同样可以延伸这个思想. 
举个例子: 11+5, 其二进制形式为11: 1011, 7: 0111</span>
1. 两个位置都为1的地方就需要进位,那么0011=1011&0111 表明了第0位和第1位需要进位。原位置两个数相加的结果为那个位置值的异或即1100=1011^0111, 即两个位置值如果不一样就为1, 一样的话要么两个位置原来值都为0结果也为0, 要么进位, 那么结果依然是0. 
2. 接下来就要把进位位和下一位相加, 所以进位值左移一位,即0011变为0110,与原位置异或(即相加)结果为0101=0110^0011. 
3. 继续重复上面操作直到进位为0, 可得到最终结果10010, 即18.
代码如下:
class Solution{
public:
    int getSum(int a,int b)
   {
        while(b!=0)
       {
            int carry=a&b;//进位
            a=a^b;//伪相加
            b=carry<<1;
       }
       return a;
   }
};





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值