https://leetcode.com/problems/divide-two-integers/
不能用乘除法就应该想到用位运算,移位除数,迫近被除数且比被除数小。然后用被除数减去这个迫近的数,再循环。
其实两个数相除说白了就是找到多少个除数加起来正好是小于等于被除数的最大值。
public class Solution {
public int divide(int dividend, int divisor) {
if (divisor == 0 || (dividend == Integer.MIN_VALUE && divisor == -1)) return Integer.MAX_VALUE;
int sign = (dividend > 0) ^ (divisor > 0) ? 1 : 0;
// 对于大数想要abs的时候一定先强转成long再做!否则会溢出。
long did = Math.abs((long)dividend);
long dis = Math.abs((long)divisor);
int res = 0;
while (did >= dis) {
long temp = dis;
long multi = 1;
while (did >= (temp << 1)) {
temp <<= 1;
multi <<= 1;
}
did -= temp;
res += multi;
}
return sign == 0 ? res : -res;
}
}