卖萌的弱渣

I am stupid, I am hungry.

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.

Solution

  • for negative integers, do it in C++, because >> 1 in C++ will not fill 1

  • Java

(Sum-of-Two-Integers.java) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Solution {
    public int getSum(int a, int b) {
        if(a==0) return b;
        if(b==0) return a;
        while(b!=0){
            int carry = a&b;
            a = a^b;
            b = carry << 1;
        }
        return a;
    }
}


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

// Sub
public int getSubtract(int a, int b) {
  while (b != 0) {
      int borrow = (~a) & b;
      a = a ^ b;
      b = borrow << 1;
  }
  
  return a;
}
  • Python
1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
  int getSum(int a, int b) {
      int ans = 0, carry = 0;
      for (int i = 0; i < 32; a >>= 1, b >>= 1, i++) {
          int lower_a = a & 1, lower_b = b & 1;
          ans |= (lower_a ^ lower_b ^ carry) << i;
          carry = (carry & lower_a) | (carry & lower_b) | (lower_a & lower_b);
      }
      return ans;
  }
};