/*
不用+号实现两个数的相加
思路:
先用10进数表示
449
+598
第一步,两数相加,但不进位得 937
第二步,两数相加,只进位, 0110
第三步,前两步的结果相加,不进位得 047
第四步,前两步的结果相加,只进位得1000
第五步,3,4步的结果相加,不进位得1047
第六步,3,4步的结果相加,只进位得0000,所以结束。
二进制表示
第一步,相加,不进位时,如果两个位都是0或1,则相加为0,不相同时则为1,所以用异或表示
第二步,相加,只进位,也就是说只有当两个位都是1时才进位,其它情况不进位,所以用按位与,然后左移,因为最后一位进位为0
第三步,递归直到没有位可进。
*/
#include <stdio.h>
int add(int a,int b)
{
int carry,sum;
if(b==0)
return a;
sum = a^b;
carry = (a&b)<<1;
return add(sum,carry);
}
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
printf("%d\n",add(a,b));
}
return 0;
}