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