1.题目描述
链接:https://www.nowcoder.com/questionTerminal/e7e0d226f1e84ba7ab8b28efc6e1aebc
请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。 给定两个int A和B。请返回A+B的值
2.思路分析
- 既然要求不能用算数运算符,那就考虑哈位运算符
- 1 ^1=0 ,1 ^0=1 ,0 ^0=0(这是异或) 1 +1=0 1+0=1 0+0=0(这是加)
- &运算和‘进位’结果一致,(A &B)<<1 即是进位结果,因此A ^B+(A&B)<<1的结果就是A+B的结果
3.代码实现
class UnusualAdd {
public:
int addAB(int A, int B) {
while(B)//当A&B<<1==0是就OK
{
int ret=A^B;
B=(A&B)<<1;
A=ret;
}
return A;
}
};