1. 程式人生 > >[CareerCup] 7.4 Implement Multiply Subtract and Divide 實現乘法減法和除法

[CareerCup] 7.4 Implement Multiply Subtract and Divide 實現乘法減法和除法

7.4 Write methods to implement the multiply, subtract, and divide operations for integers. Use only the add operator.

這道題讓我們實現乘法加法和除法,而且規定了只能使用加法。那麼我們先來看如何用加法來實現減法,我們知道,減去一個數就等於加上這個數的負數。那麼我們先寫一個求負數的函式,對於n來說,我們累計n個-1,對於-n來說,我們累計n個1。這樣減法的就搞定了,我們再來看乘法,乘法也可以看做加法的一種,比如a乘以b,就是b個a相加的結果,我們最後來判斷正負,如果a和b的符號相反,我們再呼叫之前的求負數的函式即可。最後就是除法了,除法也可以轉為加法,比如a除以b,那麼我們可以先初始化商為0,然後用商加上b和a比較,如果小的話,商就加一,再比較,以此類推直到大於等於a,符號也是最後來判斷,這樣我們就用加法實現了乘法減法和除法了,參見程式碼如下:

class Solution {
public:
    int negate(int a) {
        int res = 0, d = a < 0 ? 1 : -1;
        while (a != 0) {
            res += d;
            a += d;
        }
        return res;
    }
    int minus(int a, int b) {
        return a + negate(b);
    }
    int multiply(int a, int
b) { if (a < b) return multiply(b, a); int res = 0; for (int i = 0; i < abs(b); ++i) { res += a; } return b > 0 ? res : negate(res); } int divide(int a, int b) { if (b == 0) return INT_MAX; int m = abs(a), n = abs(b);
int res = 0, product = 0; while (product + n <= m) { product += n; ++res; } if ((a < 0 && b < 0) || (a > 0 && b > 0)) return res; else return negate(res); } };

LeetCode中有一道Divide Two Integers 兩數相除的題,那道題的除法實現過程較為複雜,但是演算法很高效,可以看看。