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


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

解题思路

本题考的是位运算

前置知识:

  • ^ 亦或 —-相当于 无进位的求和
  • 与(&) 然后左移(<<)—-相当于求每位的进位数

来解释一下上面的前置知识:
在这里插入图片描述

再来举个例子看看(假如数字是十进制):

在这里插入图片描述

代码

class Solution {
    public int add(int a, int b) {
        while (b != 0) {// 当进位为 0 时跳出

            //一轮过后。a=tempSum  b=carraySum.即进位数字加上无需进位的数字
            int tempSum = a ^ b;
            int carrySum = (a & b) << 1;
            a = tempSum;
            b = carrySum;
        }
        return a;
    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录