题目链接
法一(位运算)
public int divide(int dividend, int divisor) {
if (dividend == 0) {
return 0;
}
if (dividend == Integer.MIN_VALUE && divisor == -1) {
return Integer.MAX_VALUE;
}
boolean flag = (dividend ^ divisor) < 0;
long a = Math.abs((long) dividend);
long b = Math.abs((long) divisor);
int ans = 0;
for (int i = 31; i >= 0; i--) {
if ((a >> i) >= b) {
ans += 1 << i;
a -= b << i;
}
}
return flag ? -ans : ans;
}
本地测试
lay.showTitle(29);
Solution29 sol29 = new Solution29();
int dividend29 = 10;
int divisor29 = 3;
System.out.println(sol29.divide(dividend29, divisor29));