剑指 offer set 26 不用加减乘除做加法

总结

1. Leetcode 上有一道题, 是不用乘除做乘法, 那道题算是背包问题的变形

2. 不用加减乘除, 还可以用移位操作

3. 将数字转成二进制格式, 然后运用二进制亦或, 移位运算解决

  3.1 仅考虑各位相加, 不考虑进位, num1 ^ num2

  3.2 仅考虑进位, (num1 & num2) << 1;

  3.3 将上面两步的和加起来

 

 code

#include <iostream>
using namespace std;

int Add(int num1, int num2) {
	int sum, carry;
	do {
		sum = num1 ^ num2;
		carry = (num1 & num2) << 1;

		num1 = sum;
		num2 = carry;
	} while(num2 != 0);

	return num1;
}

int main() {
	cout << Add(-11, 12) << endl;
	return 0;
}

  

posted @ 2014-02-24 10:42  SangS  阅读(291)  评论(0编辑  收藏  举报