Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
本题是求除法,但是要注意int的边界值。时间:14ms,代码如下:
class Solution { public: int divide(int dividend, int divisor) { if (divisor == 0 || dividend > INT_MAX || dividend < INT_MIN) return INT_MAX; long long res = 0; int flag = 1; if ((dividend<0 && divisor>0) || (dividend>0 && divisor<0)) flag = -1; long long divid = abs((long long)dividend); long long divi = abs((long long)divisor); long long temp = 0; if (divid < divi) return 0; while (divi <= divid){ long long cnt = 1; temp = divi; while ((temp <<= 1) <= divid){ cnt <<= 1; } res += cnt; divid -= (temp >> 1); } res = (res*flag); if (res >= INT_MAX) return INT_MAX; else if (res <= INT_MIN) return INT_MIN; return res; } };