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

· · 个人记录

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

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

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

思路:位运算

a(i)为a二进制每一位,b(i)为b二进制每一位。

本体思路是把a+b换为n+c,a+b每一位加起来可能进位,也可能不进位。n为每一位相加没有进位和,c为每一位相加进位的和。

当c=0时,a+b = n。

根据规律可以看出,无进位和为^(异或),进位和为(a&b)<<1。

a+b=n+c 一直换 直到c=0。

class Solution {
    public int add(int a, int b) {
        while(b!=0)
        {
            int c = (a & b)<< 1;
            a = a^b;
            b = c;
        }
        return a;
    }
}