zoukankan      html  css  js  c++  java
  • [leedcode 29] Divide Two Integers

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

    If it is overflow, return MAX_INT

    public class Solution {
        //本题很多细节需要考虑:
        //1.负数问题,见代码,很讨巧
        //2.因为除法可以转换成减法,如果每次减一次除数,非常耗时间,例如123456/1,需要减123456次
        //因此本题借鉴了位运算,先把除数每次乘以2,直到除数大于被除数,然后再相减,注意此时结果也是成倍增长的
        //然后更新被除数,并且除数不断除以2,累加结果。。。
        //注意终止条件:最终的差要小于原始的除数。
        //本题针对除数和被除数差距很大的情况,节约了大量时间
        //还有一个细节:注意溢出问题,所以需要把所有中间变量都声明为long型!
        public int divide(int dividend, int divisor) {
           long ndividend=Math.abs((long)dividend);
           long ndivisor=Math.abs((long)divisor);
           int flag=1;
           if(dividend<0) flag=-flag;
           if(divisor<0) flag=-flag;
           long result=0;
           long res=1;
           while(ndividend>ndivisor){
               ndivisor=ndivisor<<1;
               res=res<<1;
           }
           while(ndividend>=Math.abs((long)divisor)){
                if(ndividend>=ndivisor){
                    ndividend=ndividend-ndivisor;
                    result+=res;
                }
                ndivisor=ndivisor>>1;
                res=res>>1;
           }
           if(flag>0){
               if(result>=0x7fffffff) return Integer.MAX_VALUE;
                else return (int)result;
           }
            else return -(int)result;
        }
    }
  • 相关阅读:
    python学习之路-day1-python基础1
    JSON.NET基本使用
    tortoiseSVN 设置ignore
    一个简单的身份证校验
    一个HttpWebRequest工具类
    linq to NHibernate
    python-plot and networkx绘制网络关系图
    DDoS攻击及防御措施
    白帽子原则
    认识特洛伊木马
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4631628.html
Copyright © 2011-2022 走看看