题目描述:
写一个函数,要求不用“+、-、*、÷”求两数之和。
思路(三步法):
第一步:两个数的各个位相加,但不进位。位运算表示:用异或。
第二步:判断两数是否需要进位。位运算表示:先做位与运算,然后再向左移一位。
第三步:前两步所得结果进行相加。一直重复前两步,直到进位是0,不需要进位时。
代码:
#include<iostream>
using namespace std;
int Add1(int a,int b)//循环方式求和
{
int sum;
int c;
do
{
sum=a^b;//各位相加但不进位;
c=(a&b)<<1;//进位;
a=sum;
b=c;
}while(b!=0);//一直循环,直到进位为0;
return sum;
}
int Add2(int a,int b)//递归方式求和
{
/*
a=各位相加但不进位;
b=进位;
*/
return b ? Add2(a^b,(a&b)<<1) : a;
}
int main()
{
cout<<"sum="<<Add1(0,0)<<endl;
cout<<"sum="<<Add1(1,0)<<endl;
cout<<"sum="<<Add1(10,20)<<endl;
cout<<"sum="<<Add1(-1,20)<<endl;
cout<<"sum="<<Add1(10,-20)<<endl;
cout<<"sum="<<Add1(-1,-2)<<endl;
cout<<"-------------------------"<<endl;
cout<<"sum="<<Add2(0,0)<<endl;
cout<<"sum="<<Add2(1,0)<<endl;
cout<<"sum="<<Add2(10,20)<<endl;
cout<<"sum="<<Add2(-1,20)<<endl;
cout<<"sum="<<Add2(10,-20)<<endl;
cout<<"sum="<<Add2(-1,-2)<<endl;
return 0;
}
结果: