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

234 阅读1分钟

题目

image.png

思路

  • ^ 亦或 ----相当于无进位的求和
    • 1 ^ 1 = 0
    • 1 ^ 0 = 1
    • 0 ^ 0 = 0
  • & 与 ----相当于求每位的进位数carry
    • 1 & 1 = 1
    • 1 & 0 = 0
    • 0 & 0 = 0
  • result = 不进位加法的和(亦或) + 进位

代码

class Solution {
    public int add(int a, int b) {
        // a看作sum,b看作carry
        while (b != 0) {//进位每次都往左挪一位,直到变成0
            int carry = (a & b) << 1;//求各个位上的进位构成的数字,因为是进位,所以往左挪一位
            a = a ^ b; //无进位加法
            b = carry;//进位部分循环下次继续加给a
        }
        return a;
    }
}