题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
第一想法
- 使用逻辑门实现一个加法器(可是我忘了)就是都为1则进位
看了讨论区
数字的相加可分为两个部分
- 值位的相加
- 进位的相加
值位的相加
- 使用异或^来表示值位
101 ^ 111 = 010
进位的相加
- 使用& 和<< 1表示进位
因为只有1+1才能发生进位
101 & 111 = 101
101 << 1 = 1010
值位与进位的相加则是最后的结果
即
1010(进位) + 10(值位)
因为不能使用+
这个符号,所以继续拆分再拼接,直到进位为0
AC代码
class Solution {
public:
int Add(int num1, int num2)
{
int val = num1;
while(num2 != 0){
val = num1 ^ num2;
num2 = (num1 & num2) << 1;
num1 = val;
}
return val;
}
};
网友评论