Skip to content
本页目录

65-不用加减乘除做加法

题目描述

https://leetcode.cn/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof

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

示例:

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

提示:

a, b 均可能是负数或 0
结果不会溢出 32 位整数

思路分析

强行记住: 加法器的实现原理 异或 + 进位,循环直到进位为0 异或的时候对丢掉进位信息,而与则刚好可以保留进位信息,将两个与的结果 左移 1,就是进位

实现代码

csharp
public class Solution {
    public int Add(int a, int b) {
        int sum, carry;
        while(b != 0){
            sum = a ^ b;
            carry = (a & b) << 1;
            a = sum;
            b = carry;
        }
        return a;
    }
}

复习

注意点: 判断的地方 b != 0 ,防止是 b>0 判断,负数出错。 注意点2: 最后 return a, 直接return sum,那么 3+0 就会出错,因为没有进 while 循环

csharp
public class Solution {
    public int Add(int a, int b) {
        // 10 + 11 = 101 
        // 异或的结果加上进位 (& 的结果左移就是)
        int carry = 0;
        int sum = 0;
        while(b != 0 ){
            sum = a ^ b;
            carry = (a & b) << 1;
            a = sum;
            b = carry;
        }
        return a;        
    }
}

Released under the MIT License.