现在的位置: 首页 > 综合 > 正文

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

2013年08月01日 ⁄ 综合 ⁄ 共 502字 ⁄ 字号 评论关闭

废话少说,直接上例子。例如要算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的值。很巧妙。

抱歉!评论已关闭.