看了剑指offer一书的一个题目,然后自己写了的代码,有迭代和递归两种方式,代码如下:
#include <stdio.h>
int add(int a, int b) //迭代
{
int c;
c = (a&b)<<1; //保存进位
a ^= b; //相加,不考虑进位,类似与半加器原理
while(c) //两数相加直到没有进位
{
b = c;
c = (a&b)<<1;
a ^= b;
}
return a;
}
int recursion_add(int a, int b)
{
int c;
if (b == 0)
return a;
c = (a&b)<<1;
a ^= b;
return recursion_add(a, c);
}
int main()
{
int a, b;
while(scanf("%d%d", &a, &b) != EOF)
{
printf("%d\n", add(a, b));
printf("%d\n", recursion_add(a, b));
}
return 0;
}