面试题65:不用加减乘除做加法

2020-05-07  本文已影响0人  潘雪雯

题目

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

解题思路

  1. 不考虑进位对每一位相加。即0加0、1加1的结果都是0,0加1、1加0的结果都是1。这和异或的结果一样。
  2. 考虑第二步进位,对0加0、0加1、1加0而言都不会产生进位,只有1加1时,会向前产生一个进位。可以想象成两个数先做位与运算,然后再向左移动一位。
  3. 把前两步结果相加,即重复前两步操作,直到不产生进位为止。

代码

class Solution{
  public:
    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;
    }
};

完整代码见GitHub

上一篇下一篇

猜你喜欢

热点阅读