Appearance
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;
}
}
AlgoPress