public class Solution {
private int divide_res = 0;
public int divide(int dividend, int divisor) {
if(divisor == -1) return Integer.MAX_VALUE;
else if(divisor == 1) return Integer.MIN_VALUE;
else if(divisor > 1){
dividend += divisor;
divide_res ++;
}else if(divisor == Integer.MIN_VALUE){
return 1;
}else{
dividend -= divisor;
divide_res ++;
}
}
if(divisor == Integer.MIN_VALUE){
return 0;
}
if((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0)){
neg = true;
}
divideHelper(Math.abs(dividend), Math.abs(divisor));
return !neg ? divide_res : 0 - divide_res;
}
public void divideHelper(int dividend, int divisor){
if(dividend < divisor)
return ;
int count = 1, d = divisor;
while(divisor <= dividend && divisor > 0){
divide_res += count;
dividend -= divisor;
divisor <<= 1;
count <<= 1;
}
divideHelper(dividend, d);
}
}
private int divide_res = 0;
public int divide(int dividend, int divisor) {
boolean neg = false;
//考虑overflow
if(divisor == -1) return Integer.MAX_VALUE;
else if(divisor == 1) return Integer.MIN_VALUE;
else if(divisor > 1){
dividend += divisor;
divide_res ++;
}else if(divisor == Integer.MIN_VALUE){
return 1;
}else{
dividend -= divisor;
divide_res ++;
}
}
if(divisor == Integer.MIN_VALUE){
return 0;
}
if((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0)){
neg = true;
}
divideHelper(Math.abs(dividend), Math.abs(divisor));
return !neg ? divide_res : 0 - divide_res;
}
public void divideHelper(int dividend, int divisor){
if(dividend < divisor)
return ;
int count = 1, d = divisor;
while(divisor <= dividend && divisor > 0){
divide_res += count;
dividend -= divisor;
divisor <<= 1;
count <<= 1;
}
divideHelper(dividend, d);
}
}