A+B问题

1 · A + B 问题
 
 
描述

给出两个整数 aa 和 bb , 求他们的和并以整数(int)的形式返回。

背完这套刷题模板,真的不一样!

北大计院令狐冲15年刷题经验总结《算法小抄模板Cheat Sheet》助你上岸!

微信添加【jiuzhang0607】备注【Cheat Sheet】领取

你不需要从标准输入流读入数据,只需要根据aplusb传入的两个参数 a 和 b,计算他们的和并返回就行。
-2^{31} \leq a, b \leq 2^{31} - 1231a,b2311
-2^{31} \leq a + b \leq 2^{31} - 1231a+b2311

样例

样例 1:

输入:

a = 1
b = 2

输出:

3

解释:

a + b = 1 + 2 = 3

样例 2:

输入:

a = -1
b = 1

输出:

0

解释:

a + b = -1 + 1 = 0

挑战

显然你可以直接返回 a + b,但是你是否可以挑战不这样做?(不使用+等算数运算符)

 

异或运算: 不进位的加法

a^b就是a+b之后, 该进位的地方不进位的结果

考虑哪些地方需要进位, 就是a+b里都是1的地方

a&b就是a和b里都是1的那些位置, a&b<<1就是进位之后的结果

所以 : 

a+b = (a^b)+(a&b<<1)

命令 a' = a^b, b'=(a&b)<<1

可以知道 这个过程是在模拟加法的运算过程, 进位不可能一直持续, 所以b最终会变成0

重复上面的操作就可以求得 a+b的值

 

public class Solution {
    /**
     * @param a: An integer
     * @param b: An integer
     * @return: The sum of a and b
     */
    public int aplusb(int a, int b) {
        return a+b;
    }
}
posted @ 2022-06-28 22:02  Appinn  阅读(52)  评论(0编辑  收藏  举报