Divide two integers without using multiplication, division and mod operator.
int divide(int dividend, int divisor) { // Note: The Solution object is instantiated only once. int res = 0; if(divisor == 0) return 0; if(divisor==1)return dividend; else if(divisor == -1)return -dividend; bool ispositive = true; if(dividend<0) { dividend = -dividend; if(divisor<0) divisor = -divisor; else ispositive = false; } else if(divisor<0) { divisor = -divisor; ispositive = false; } while(dividend>=divisor) { dividend -= divisor; res++; } if(!ispositive) res = -res; return res; }
减法+位操作:Accepted
int divide(int dividend, int divisor) { // Note: The Solution object is instantiated only once. long long a = abs((double)dividend); long long b = abs((double)divisor); long long res = 0; while(a >= b) { long long c = b; for(int i = 0; a >= c; i++, c <<=1) { a -= c; res += 1<<i; } } return ((dividend ^ divisor) >> 31) ? (-res) : (res); }