leetcode 29. Divide Two Integers

//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;
	    }
    }
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值