题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:脑子里想了一下,这是要考位操作,&,异或操作,但不知道怎么搞,其实除了四测运算,还有++,–;
代码如下:
class Solution {
public:
int Add(int num1, int num2)
{
if(num1>0){
while(num1--)
{
num2++;
}
}
else{
while(num1++)
{
num2--;
}
}
return num2;
}
};
看了一下别人的注释,&位与操作,看哪些二进制位上都是1,这些位置上相加会产生进位,(n1&n2)<<1,表示相加产生的进位结果,^异或操作相同为0 ,不同为1,表示没有产生进位相加的结果,迭代直至进位为0 ,跳出循环,代码如下;
class Solution {
public:
int Add(int num1, int num2)
{
int n1 = (num1&num2)<<1;//进位结果
int n2 = num1^num2;//两数相加,不考虑进位结果
while(n1)//直到进位结果为0 ,跳出循环
{
int temp = n1;
n1 = (n1&n2)<<1;
n2 = temp^n2;
}
return n2;
}
};