Leetcode371: Sum of Two Integers

371. Sum of Two Integers
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
Example:
Given a = 1 and b = 2, return 3.
题意:
计算两个整数的值,不能用加法和减法。

解答:
一开始的时候,我一直在思考怎么样将加法转化成为乘除法,嗯,是的,思维被限制在加减乘除上面了。开始的时候,想着将a,b化成2的指数,这样的话,a+b就成为了2^a*2^b的指数,然后通过log运算就可以得到a+b的值。
是的,在一般的情况下,这样做是可以的,但是因为题目给的a,b是int类型,所以取INT_MAX和INT_MIN的时候,作为2的指数并且还相乘就直接爆了,使用long long的类型都是不可以的。
然后,去搜索,发现了半加法的思想。就是对于两个二进制数,两个单独的位相加的结果是可以用异或得到的,而进位是可以用与得到的。

代码:
class Solution {
public:
    int getSum(int a, int b) {
        while(b!=0){
            int carry=a&b;
            a=a^b;
            b=carry<<1;
        }
        return a;
    }
};

复杂度:O(n).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值