To solve this problem, you need to work on binary
representation of numbers and bitwise operators.

**Approach to solve this problem is:-**

- If you add two binary numbers together but forget to carry, bit[i] will be 0 if
bit[i] in a and b are both 0 or both 1.This is an XOR.

- If you add two numbers together but only carry, you will have a 1 in bit[i] if
bit[i-1] in a and b are both 1’s.This is an AND, shifted.

- Now,
recurse until there’s nothing to carry.

**Sample Program:-**

```
/**
* @author Dixit
*
*/
public class AddNumber {
/**
* @param args
*/
public static void main(String[] args) {
int a = 2;
int b = 3;
System.out
.println("Addition of two number without using addition operator:"
+ add(a, b));
}
static int add(int a, int b) {
if (b == 0)
return a;
int sum = a ^ b; // add without carrying
int carry = (a & b) << 1; // carry, but don’t add
return add(sum, carry); // recurse
}
}
```

**Output:-**

`Addition of two number without using addition operator:5 `

**How Solution Works?**

-- Initially a=2 and b=3,call add(2,3)

-- Apply the XOR operation on ‘a’ and ‘b’ i.e. 2^3 but don’t consider
carry. So you get sum as 1(0001)

-- Apply (a & b) << 1, returns carry as 4(0100)

-- Call add(1,4) recursive call.

-- Again,Apply the XOR operation on ‘a’ and ‘b’ i.e. 1^4 but don’t
consider carry. So you get sum as 5(0101)

-- Apply (a & b) << 1, returns carry as 0(0000)

-- Recursively call (5,0) which returns 5 if ‘b’ is 0.

**Enjoy Programming.**

wont work if both the numbers have opposite signs

ReplyDelete