不用加减法做加法

来源:互联网 发布:mt4外汇交易系统源码 编辑:程序博客网 时间:2024/05/27 20:37
/*  这里只能想到位运算了,思路如下:    假设a = 5,b = 17;    对应的二进制数即为:    a:0000 0101    b:0001 0001    要想求解两个数的和,就得分如下三步来计算:    1.计算不带进位的两个数的和    2.计算两个数在计算中发生的进位    3.将不带进位的和与发生的进位求和,得出最终结果  好了,这里我们可以来分这三步,对两个数求和过程进行分析:  1.计算不带进位的两个数的和    其结果即为:0000 0101            ^  0001 0001           --------------              0001 0100  2.计算两个数在计算中发生的进位     2.1 其结果即为:0000 0101                 &  0001 0001                --------------                   0000 0001          左移后,结果为0000 0010  3.将不带进位的和与发生的进位求和     其结果即为:0001 0100             +  0000 0010            --------------               0001 0110     则结果即为:22*/#include <iostream>using namespace std;int add(int a,int b){    if(b==0)        return a;    int sum = a^b;//计算不带进位的和    int carry = (a&b)<<1;//进位计算    return add(sum,carry);//进位与不带进位和相加,直到无进位为止}int main(){    int a,b;    while(cin>>a>>b)    {        cout<<add(a,b)<<endl;    }    return 0;}