剑指 Offer 65. 不用加减乘除做加法

写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。

 

示例:

输入: a = 1, b = 1
输出: 2

 

提示:

  • ab 均可能是负数或 0
  • 结果不会溢出 32 位整数
class Solution {
    public int add(int a, int b) {
        //使用异或、与运算
        //找规律
        //12 10
        //进位 1100 1010 &运算 1000 8 << 左移一位 10000 16
        //非进位和 1100 1010 ^运算 0110 6
        //发现 12+10 = 16+6 = 22
        //即两个数字之和 = 非进位和 + 进位 = a^b + a&b << 1
        //没有进位的时候,两数字之和=非进位和
        //则判断条件,进位为0时,两数字之和=非进位和
        //判断进位是否为0
        while(b !=0 ) {
            int c = (a&b) << 1;//进位
            a ^= b;//非进位和
            b=c;
        }
        //最后非进位和就是两数之和
        return a;
    }
}

 

你可能感兴趣的:(剑指offer)