Leetcode020--两个整数相除

一、原题



Divide two integers without using multiplication, division and mod operator. 
If it is overflow, return MAX_INT. 


一、中文


不使用除法,乘法和取余,求两个整数的相除的结果,如果有溢出就返回最大的整数。 



三、举例



  给定一个被除数20,给定一个除数3,最后得到的结果是6


四、思路



将一个数左移一位也就相当于将这个是乘以2,我们将除数左移一位也就是相当于将他乘以2,任何一个整数都可以用二进制的形式来表示,用二进制表示的最小单位是1,而这里使用的是最小的单位是这个除数,这样就可以移动的方式来观察被除数中到底有多少个除数,最后将这些数做和,返回就OK了


五、程序



package code;

public class LeetCode020{
	public static void main(String args[]){
		System.out.println(divide(20, 3));
	}
	
	public static int divide(int dividend, int divisor){
		if(divisor == 0){
			return -1;
		}
		
		//符号位
		int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
		
        // 求绝对值,为防止溢出使用long
        long dvd = Math.abs((long) dividend);
        long dvs = Math.abs((long) divisor);
		
		int result = 0;
		
		//主要程序代码
		while(dvs < dvd){
			long tmp = dvs;
			long mul = 1;
			
			while(dvd >= (tmp << 1)){
				tmp <<= 1;
				mul <<= 1;
			}
			
			//减去最接近dvd的dvs的指数倍数的值(值为tmp)
			dvd -= tmp;
			
			result += mul;

		}	
		return result*sign;
	}

}



已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页