您的位置:首页 > 其它

不用+,-,x,/做加法运算

2013-07-23 12:48 211 查看
废话少说,直接上例子。例如要算14+8的和,平常的思维方式,4+8得2进1,1+1得2不进位,结果就是22.思维方式就是自右往左,边加边求和,再进位,再重复以上步骤。

但是,现在限制住了加减乘除,剩下的只有与或非了。于是加可用异或,求进位可用与,重复上述步骤直到结果正确即可。改进一下,我们可分为三步走:

1,整体求和(异或)

2,整体求进位(与)

3,重复以上步骤(循环或递归)

C++代码如下:

int add(int num1,int num2)
{
while(num2)
{
int sum=num1 ^ num2 ;//异或
int carry=(num1 & num2) << 1 ;//与
num1=sum;
num2=carry;
}
return num1;
}更巧妙的思路:
int add(int a,int b){
char* p= (char *)a ;
cout<<*p<<endl;
return (int)&p[b];//p[b]等价于*(p+b)

}思路是:定义一个char型指针指向a代表的地址,假如a=33,则p指向地址33,p[b]等价于p+b号地址的值,假设b为44,则p[b]指向77号地址的值,所以,对它取地址,就可以得出a+b的值。很巧妙。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  加法