题目
leetcode 29
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商
int divide(int dividend, int divisor){
if (divisor == 1) return dividend;
if (divisor == -1) {
if (dividend != INT_MIN) return -dividend;
else return INT_MAX;
}
long int a = 0, b, nums, result = 1;
if (dividend == INT_MIN) {a = INT_MAX; a++;}
else a = (dividend > 0 ? dividend : -dividend);
if (divisor == INT_MIN) {b = INT_MAX; b++;}
else b = (divisor > 0 ? divisor : -divisor);
if (a < b) return 0;
nums = b;
while (nums + nums <= a) {
result += result;
nums += nums;
}
while (nums + b <= a) {
nums += b;
result++;
}
if (dividend > 0 && divisor < 0) result = -result;
if (dividend < 0 && divisor > 0) result = -result;
return result;
}