Problem
Problem ID: 371
Title: Sum of Two Integers
Description: Given two integers a and b, return the sum of the two integers without using the operators + and -.
Thoughts
This problem is a good revision for bitwise arithmetic.
Solution
Explanation
Instead of manually evaluating the individual bit, we can recursively calculate the new sum without carry and swap the other operand with the carry.
For example:
Adding:
a: 0 0 1 0 1 1 0 1
b: 0 0 1 1 0 1 1 0
New sum without carry (a^b
):
0 0 0 1 1 0 1 0
Carry(a&b << 1
):
0 1 0 0 1 0 0 0
Now the answer becomes sum(a^b, a&b <<1)
Implementation
class Solution {
public:
int getSum(int x, int y) {
// Iterate till there is no carry
while (y != 0)
{
unsigned carry = x & y;
x = x ^ y;
y = carry << 1;
}
return x;
}
};