int divide(int dividend, int divisor) {
if(divisor == -1 && dividend == INT_MIN) return INT_MAX;
if(divisor == 1 && dividend == INT_MIN) return INT_MIN;
if(divisor == INT_MIN) return dividend == INT_MIN ? 1 : 0;
bool sign = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0) ? false : true;
divisor = abs(divisor);
int res = 0;
if(dividend == INT_MIN){
++res;
dividend += divisor;
}
dividend = abs(dividend);
if(divisor > dividend) return res=sign?res:-res;
while(dividend != 1 && dividend != 0 && dividend > divisor){
int tmp = divisor; int cnt = 1;
while(dividend > (tmp << 1)){
if((tmp << 1) < tmp) break;
tmp = tmp << 1;
cnt = cnt << 1;
}
dividend -= tmp;
res += cnt;
}
res = (res + (dividend < divisor ? 0 : 1));
res=sign?res:-res;
return res;
}
29. 两数相除/C++
最新推荐文章于 2022-09-09 21:12:16 发布