不用加减乘除完成两数相加
看了剑指offer一书的一个题目,然后自己写了的代码,有迭代和递归两种方式,代码如下:
1 #include <stdio.h> 2 3 int add(int a, int b) //迭代 4 { 5 int c; 6 7 c = (a&b)<<1; //保存进位 8 a ^= b; //相加,不考虑进位,类似与半加器原理 9 10 while(c) //两数相加直到进位为0 11 { 12 b = c; 13 c = (a&b)<<1; 14 a ^= b; 15 } 16 17 return a; 18 } 19 20 int recursion_add(int a, int b) 21 { 22 int c; 23 24 if (b == 0) 25 return a; 26 27 c = (a&b)<<1; 28 a ^= b; 29 30 return recursion_add(a, c); 31 } 32 33 int main() 34 { 35 int a, b; 36 while(scanf("%d%d", &a, &b) != EOF) 37 { 38 printf("%d\n", add(a, b)); 39 printf("%d\n", recursion_add(a, b)); 40 } 41 return 0; 42 }