位运算方法:
链接:https://www.nowcoder.com/questionTerminal/59ac416b4b944300b617d4f7f111b215?answerType=1&f=discussion
来源:牛客网

不用加减乘除做加法:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
考点:进制转化
思路:
& 按位与运算:相同位的两个数字都为1,则为1;若有一个不为1,则为0。两个数相与,并左移一位:相当于求得进位
  如:1&1=1 将1左移一位变成了10,相当于拿到了进位。
^ 按位异或运算:相同位置不同则为1,相同则为0。相当于每一位相加,而不考虑进位。

第一步 异或——无进位相加得result1 (a^b)
第二步 与+左移一位——求得进位result2 (a&b)<<1
第三步 result = result1 + result2即是结果
但问题在于,result1 + result2可能还有进位,因此result还要重复一二步这个过程。直到没有进位,异或的结果就是最终的结果为止
如 101 + 011 -> 110 + 1010 -> 1100 + 0100 -> 1000 + 1000 -> 0 (异或出现了0,返回上一次异或的结果)
最终得到的是1000 也就是5+3=8

public class Solution {
      public int Add(int num1,int num2) {
             while (num2!=0) {
                int temp = num1^num2;
                num2 = (num1&num2)<<1;
                num1 = temp;
            }
            return num1;
        }
}

除了位运算,自己的方法BigDecimal (其可以与int进行相互转化)
-->无法达到题中要求,缺点: 若数字过大,无法转换为int了.

 public class Solution {

    public Solution() {
    }

    public int Add(int a, int b) {

        BigDecimal c = new BigDecimal(a);
        BigDecimal d = new BigDecimal(b);
        BigDecimal e = c.add(d);
        int f = e.intValue();

        System.out.println(f);

        return f;
    }

    public static void main(String[] args) {
        int g = new Solution().Add(1, 4);
    }
}