首页 > 其他 > 详细

leetcode之Divide Two Integers

时间:2015-10-03 00:54:19      阅读:318      评论:0      收藏:0      [点我收藏+]

题目:Divide Two Integers

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.


// 思路:使用位运算,和手动计算除法相同。从高位开始除,然后将结果累加。
// 注意点:1.关于符号
// 2.关于边界值,以及达到Integer.MAX_VALUE时的结果处理
// 3.除法计算的次数:被除数为k1位,除数为k2位,那么需要除k1-k2+1次

 public int divideOfMy(int dividend, int divisor) {
	       
	        if(divisor==0) return Integer.MAX_VALUE;         
		    if(divisor==-1 && dividend == Integer.MIN_VALUE)
		        return Integer.MAX_VALUE;
		 
		    //get positive values
		    long div = Math.abs((long)dividend);
		    long div2 = Math.abs((long)divisor);
		    
	       int k1=getK(div);
	       int k2=getK(div2);
	       
	       int result=0;
	       long sam=div2;
	       
	       div2=div2<<(k1-k2);
	       int count=k1-k2+1;
	       
	       while(count>0){
	    	   result=result<<1;
	    	   if(div>=div2){
	    		   ++result;
	    		   div=div-div2;
	    	   }
	    	   div2=div2>>1;
	    	   count--;
	       }
	       return ((dividend<0)^(divisor<0))? -result:result;  
	    	   
	    }
	public static int getK(long div){
		int count=0;
		while(div>0){
			++count;
			div=div>>1;
		}
        return count;
	}

  

leetcode之Divide Two Integers

原文:http://www.cnblogs.com/youyouzaLearn/p/4852923.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!