不用+号实现两个数相加

来源:互联网 发布:理正深基坑支护软件 编辑:程序博客网 时间:2024/06/14 08:03



/*不用+号实现两个数的相加思路:先用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;}