注意 Integer.MIN_VALUE * (-1) 会溢出, 这里所有变量变成long防止溢出
除数*2 对映的倍数(商)也会乘以2;再用被除数减去除数*2^n 剩余的数如果依然能被除数整除,接着循环操作
代码:
public class Solution {
public int divide(int dividend, int divisor) {
int result = 0;
int flag = 0;
if(divisor == 0 ||(divisor == -1 && dividend == Integer.MIN_VALUE)) return Integer.MAX_VALUE;
if(dividend == 0) return 0;
if(dividend < 0) flag++;
if(divisor < 0) flag++;
long divn = (long) (Math.abs((long) dividend));
long divs = (long) (Math.abs((long) divisor));
while(divs <= divn){
long temp = divs;
long x = 1;
while((temp<<1) < divn){
x <<= 1;
temp <<= 1;
}
result += x;
divn -= temp;
}
return flag == 1? (0-result) : result;
}
}
Jan 15 - Divide Two Integers; Math; Integer; Bit Operation;
原文:http://www.cnblogs.com/5683yue/p/5135079.html