码迷,mamicode.com
首页 > 其他好文 > 详细

371. Sum of Two Integers

时间:2019-11-09 11:46:56      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:产生   use   适合   not   异或   第一部分   put   左移   加法   

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example 1:

Input: a = 1, b = 2
Output: 3

Example 2:

Input: a = -2, b = 3
Output: 1

"思路:
1、把运算分为两部分,第一部分只计算那些对应位相加,能够产生进位的位所产生的进位(所以采用异或运算),第二部分只计算那些对应位相加,不可以产生进位的位的运算结果((1,0),(0,1)(0,0)是要处理的情况,所以采用与运算(因为与运算不进位,也就是排除掉了对应位都是1的情况))。然后判断一下第一部分(即是否有对应位可以产生进位)的值是否为0,如果是0,那么直接返回第二部分的值(异或的结果正好是适合无进位情况的),如果不是0(需要把进位加上),然后把第一部分左移一位(因为他们是进位,此前并未左移)与第二部分相加就得到了总的结果,因为又是加法,然后就可以再次调用这个函数计算,直至进位是0。我想的是运算不会溢出,嘿嘿
2、异或运算和与运算的作用
(1)与运算 只关注于对应位相加时可以产生进位的情况,即(都是1)
(2)异或运算 只关注于对应位相加时不会产生进位的情况,而且与运算是没有进位的,所以排除了异或运算负责的情况,(1,0),(0,1)。"

 https://leetcode.com/problems/sum-of-two-integers/discuss/167728

 

class Solution {
    public int getSum(int a, int b) {
        return b == 0 ? a : getSum(a ^ b, (a & b) << 1);    
    }
}

 

371. Sum of Two Integers

标签:产生   use   适合   not   异或   第一部分   put   左移   加法   

原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11824346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!