题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路
- 无进位加减:异或
- 计算进位:与运算左移1位
- 两个结果相加,其实就是重复上面两步操作(如果直接用加号,就不符合题意了),当进位等于0的时候,就得到结果了。
AC代码
#include <iostream>
using namespace std;
class Solution {
public:
int Add(int num1, int num2)
{
int sum;
int carry;//进位
while(num2 > 0)
{
sum = num1 ^ num2; //不进位加,减
carry = (num1 & num2)<<1; //进位的值
num1 = sum;
num2 = carry; //当num2 == 0时,即是没有进位
}
return num1;
}
};
int main()
{
Solution so;
cout << so.Add(1,-2) << endl;
return 0;
}