#include<iostream>usingnamespacestd;
int add(int x, int y)
{
//异或实现两数相加不进位int a = x^y;
//相与移位实现进位int b = (x&y)<<1;
//如果b==0,没有进位了,就返回相加的结果if (b == 0)
{
return a;
}
//继续递归相加和进位return add(a, b);
}
int main()
{
int x, y;
while (cin >> x >> y) {
cout << add(x, y) << endl;
}
system("pause");
return0;
}
二、循环解法:
#include <iostream>
using namespace std;
int add1(int x, int y)
{
intsum;
int carry;
int bx, by;
int base;
base = 1;
//carry用来判断是否需要进位
carry = 0;
sum = 0;
while (base != 0) {
bx = x & base;
by = y & base;
base <<= 1;
sum |= ((bx) ^ (by) ^ carry);
carry = ((bx & by) || (bx & carry) || (by & carry)) ? base : 0;
}
returnsum;
}