Leetcode Divide Two Integers

OpenSoucre發表於2014-07-04

Divide two integers without using multiplication, division and mod operator.

不用乘、除、求餘操作,返回兩整數相除的結果,結果也是整數。

假設除數是2,相除的商就是被除數二進位制表示向右移動一位。

假設被除數是a,除數是b,因為不知道a除以b的商,所以只能從b,2b,4b,8b.......這種序列一個個嘗試

從a扣除那些嘗試的值。

如果a大於序列的數,那麼a扣除該值,並且最終結果是商加上對應的二進位制位為1的數,然後嘗試序列的下一個數。

如果a小於序列的數,那麼從頭再來,直至a小於b

 

class Solution {
public:
    int divide(int dividend, int divisor) {
        long long a = llabs((long long)dividend), b = llabs((long long)(divisor)), result = 0;
        while(a>=b){
            long long c = b;
            int i = 0;
            while(a>=c){
                a-=c;
                result+=1<<i; ++i;
                c = c<<1;
            }
        }
        if((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0)) result = -result;
        return (int)result;
    }
};

 

 

 

 

相關文章