剑指offer--不用四则运算符求和

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Android_chunhui/article/details/88902840

题目
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

思路:
求和过程分为两部:求各位上的值,求进位值。然后将这两个数当作两个加法项递归进行直到进位制为0.如7 + 5:
各位值2,进位值10, 下一次分别为12,0递归结束,结果为12.
这里要按二进制处理,二进制数求各位值是异或:0111 ^ 0101 = 0010,求进位值是与操作再左移一位。(0111 & 0101)<<1=1010.
然后更新两个加法项0010,1010–》0010^1010=1000, (0010&1010)<<1=0100–> (1000 ^ 0100)=1100, (1000& 0100)=0,递归结束,
结果为1100.

class Solution {
public:
	int Add(int num1, int num2)
	{
		return num2 > 0 ? Add(num1^num2, (num1&num2) << 1) : num1;
	}
};

猜你喜欢

转载自blog.csdn.net/Android_chunhui/article/details/88902840
今日推荐