不用加减乘除完成两数相加

来源:互联网 发布:诸葛亮网络用语含义 编辑:程序博客网 时间:2024/04/30 14:54

看了剑指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;}


 

原创粉丝点击