【每日一题】另类加法
1、题目来源
牛客网:另类加法
2、题目描述
给定两个int A和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。
3、示例
输入:1,2
输出:3
4、解题思路
二进制加法有一个特点。
“按位异或” 与 “加法” 的结果是一致的 。即二进制位 异或运算 相当于对应位相加(不考虑进位)。
按位异或: 1^1=0 1^0=1 0^0=0
求和: 1+1=0 1+0=1 0+0=0
“按位与” 和 “加法进位位” 的结果是一致的 。即二进制位与运算相当于对应位相加之后的进位。
按位与: 1&1=1 1&0=0 0&0=0
进位位: 1+1=1 1+0=0 0+0=0
于是可以用 “按位异或运算” 和 “按位与运算” 来表示加法, (当进位之后的结果为0时,相加结束)。完美解决不得使用 “+” 或其它算数运算符的问题。
5、代码展示
class UnusualAdd {
public:
int addAB(int A, int B) {
if(B==0) return A;
return addAB((A^B), (A&B)<<1);
}
};