## The challenge

Given two integers a, b, find The sum of them, BUT You are not allowed to use the operators + and –

• The numbers (a,b) may be positive , negative values or zeros .
• Returning value will be an integer .
• Java: the following methods are prohibited: addExactaveragecollectdecrementincrementnextAfternextDownnextUpreducesubtractExactsumsumming .
The following classes are prohibited: BigDecimal and BigInteger .

Examples

 ``````1 2 3 `````` ``````1- Add (5,19) ==> return (24) 2- Add (-27,18) ==> return (-9) 3- Add (-14,-16) ==> return (-30) ``````

## The solution in Java code

Option 1:

 ``````1 2 3 4 5 6 7 8 `````` ``````public class Solution { public static int add(int x, int y) { if(y == 0) return x; int er = x ^ y; int ar = (x & y) << 1; return add(er, ar); } } ``````

Option 2:

 ``````1 2 3 4 5 6 `````` ``````import java.util.concurrent.atomic.AtomicInteger; public class Solution { public static int add(int a, int b) { return (int)(new AtomicInteger(a)).addAndGet(b); } } ``````

Option 3:

 ``````1 2 3 4 5 `````` ``````public class Solution { public static int add(int x, int y) { return x \u002b y; } } ``````

## Test cases to validate our solution

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 `````` ``````import org.junit.Test; import static org.junit.Assert.assertEquals; import org.junit.runners.JUnit4; public class SumTwoIntgers { @Test public void checkPositiveValues() { assertEquals( 3, Solution.add(1,2)); assertEquals(24, Solution.add(5,19)); assertEquals(40, Solution.add(23,17)); } @Test public void checkNegativeValues() { assertEquals( -30, Solution.add(-14,-16)); assertEquals(-226, Solution.add(-50,-176)); assertEquals( -39, Solution.add(-10,-29)); } @Test public void checkMixtureValues() { assertEquals( 0, Solution.add(-13,13)); assertEquals( -9, Solution.add(-27,18)); assertEquals(-60, Solution.add(-90,30)); } } ``````