//Divide two integers without using multiplication, division and mod operator.
//If it is overflow, return MAX_INT.
public class Solution {
public static void main(String[] args) {
int input1 = 10;
int input2 = 3;
int result = divide(input1,input2);
System.out.println(result);
}
//超时的做法
// public static int divide(int dividend, int divisor) {
// int result = 0;
// long temp1 = Math.abs((long)dividend);
// long temp2 = Math.abs((long)divisor);
// boolean flag = false;
// if((dividend<0&&divisor>0)||(dividend>0&&divisor<0)){
// flag = true;
// }
// while(temp1-temp2>0){
// result++;
// temp1 = temp1 - temp2;
// }
// if(result>Integer.MAX_VALUE){
// return Integer.MAX_VALUE;
// }
// if(flag == true){
// return -result;
// }
// return result;
// }
public static int divide(int dividend, int divisor) { //左移位相当于*2
if(divisor==0) return Integer.MAX_VALUE; //特殊情况的处理
if(divisor==-1 && dividend == Integer.MIN_VALUE) return Integer.MAX_VALUE;
long temp1 = Math.abs((long)dividend);
long temp2 = Math.abs((long)divisor);
int result = 0;
while(temp1>=temp2){
int numShift = 0;
while(temp1>=(temp2<<numShift)){ //将乘数一直*2,之道大于被乘数
numShift++; //记录左移位数
}
result += 1<<(numShift-1); //结果为1左移相同的位数
temp1 -= (temp2<<(numShift-1)); //解决10/3的情况
}
if((dividend>0 && divisor>0) || (dividend<0 && divisor<0)){ //正负数的处理
return result;
}else{
return -result;
}
}
}
leetcode 29. Divide Two Integers
最新推荐文章于 2024-09-24 08:39:48 发布