LeetCode | Divide Two Integers(兩個數相除)
阿新 • • 發佈:2019-02-03
Divide two integers without using multiplication, division and mod operator.
題目解析:
求兩個數相除,不能用乘除法。那麼可以用加減法一點一點算。再有個計數變數,就能得到最後的結果。但是這樣會超時。
怎麼辦?這時二分法就起作用了。我們一次加上當前和的倍數,那麼就成倍的增加。當sum+sum > dividend的時候。我們就用dividend-sum;然後用新的值從sum=divisor開始重新求解。
我一開始用的遞迴的方法,結果也是超時了。以為這種方法不行。但改用非遞迴的形式,就能得到正確結果了。說明,能用非遞迴儘量用非遞迴。
class Solution { public: int divide(int dividend, int divisor) { if(dividend == 0 || divisor == 0) return 0; bool flag = false; if((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0)) flag = true; long long c = dividend; //先用long long變數儲存兩個值,否則負數最大值求正數的時候會越界。 long long d = divisor; //即使將int變數abs(dividend)賦值給long long變數也會越界。應該先擴充套件 long long a = abs(c); long long b = abs(d); long long sum = 0; int count = 0; int n = 0; while(a >= b){ sum = b; count = 1; while(sum + sum <= a){ sum += sum; count += count; } a -= sum; n += count; } if(flag) return 0-n; return n; } };