不用加减乘除法,只能用位运算来代替做加法了。
第一步:不考虑进位,0加0与 1加1的结果都0,0加1与1加0的结果都是1。我们可以注意到,这和异或的结果是一样的。
第二部:只考虑运算进位,对0加0、0加1、1加0而言,都不会产生进位,只有1加1时,会向前产生一个进位。此时我们可以想象成是两个数先做位与运算,然后再向左移动一位。只有两个数都是1的时候,位与得到的结果是1,其余都是0。
第三部:把前两个步骤的结果相加。如果我们定义一个函数AddWithoutArithmetic,第三步就相当于输入前两步骤的结果来递归调用自己。
//不用加减乘除做加法运算
#include <iostream>
using namespace std;
int AddWithoutArithmetic(int num1, int num2)
{
if(num2 == 0)
return num1;
if(num1 == 0)
return num2;
int sum = num1 ^ num2; //不记进位的和
int carry = (num1 & num2)<<1; //进位
return AddWithoutArithmetic(sum,carry);
}
int main()
{
int a, b;
while(cin>>a>>b)
cout<<AddWithoutArithmetic(a,b)<<endl;
return 0;
}