写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2
提示:
a, b 均可能是负数或 0
结果不会溢出 32 位整数
位运算^和&的简单操作。
异或找到不需要进位的情况。
相与找到需要进位的情况。然后左移一位模拟进位。
不停循环直到进位的值为零时,即两数异或就是两个数的和的情况。
#include <iostream>
using namespace std;
class Solution {
public:
int add(int a, int b) {
int n, m;
while (b != 0) {
//这是无进位的情况。
n = a ^ b;
//进位的。
m = (unsigned int)(a & b) << 1; // 转换成无符号数。可能有负数的情况。
a = n;
b = m; // 一直到进位的情况为 0,退出循环。
}
return a;
}
};
int main(){
int mya=9,myb=3;
Solution S;
cout<<S.add(mya,myb)<<endl;
system("pause");
return 0;
}