https://leetcode-cn.com/problems/divide-two-integers/
思路:先减去最大值,接着继续减;例如:10、3,过程:10->7(+1)->4(+2)->1(+3)
int divide(int dividend, int divisor) {
if (divisor == 1) {
return dividend;
}
if (divisor == -1) {
return dividend == INT_MIN ? INT_MAX : -dividend;
}
if (divisor == INT_MIN) {
return dividend == INT_MIN ? 1 : 0;
}
int flag = 1;
if ((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0)) {
flag = -1;
}
//INT_MIN转化为INT_MAX,存储一个1
int dflag = 0;
if (dividend == INT_MIN) {
dividend += 1;
dflag = 1;
}
dividend = dividend < 0 ? -dividend :dividend;
divisor = divisor < 0 ? -divisor: divisor;
int res = 0;
while(dividend >= divisor) {
int temp = divisor;
//初始化1,下面dividend会默认每次减一个divisor
int num = 1;
//>= divisor,在进行相加时,会超出int范围,故不能使用 >= 0
while (dividend - divisor >= divisor) {
num = num + num;
divisor = divisor + divisor;
}
dividend = dividend - (divisor);
//针对最小INT_MIN转化为INT_MAX少一个数字,进行相加
if (dflag) {
dividend += 1;
dflag = 0;
}
divisor = temp;
res += num;
}
return flag * res;
}