总结
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; } |
原文:http://www.cnblogs.com/xinsheng/p/3564221.html