首页 > 其他 > 详细

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

时间:2014-02-25 08:35:47      阅读:278      评论:0      收藏:0      [点我收藏+]

总结

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;
}

  

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

原文:http://www.cnblogs.com/xinsheng/p/3564221.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!