• [leetcode]29. Divide Two Integers不用除法实现除法


    思路是不断将被除数分为两部分,每次分的一部分都是尽量大的除数的倍数,然后最后的商就是倍数加上剩下的部分再分,知道不够大。

    递归实现

    剩下的难点就是,正负号(判断商正负后将两个数都取绝对值),数太大(将数转成long类型),特殊情况(0除数和商太大)

    public int divide(int dividend, int divisor) {
            //判断结果的正负
            int flag = (dividend<0 != divisor<0)?-1:1;
            long lend = Math.abs((long)dividend);
            long lor = Math.abs((long)divisor);
            //特殊情况
            if (divisor==0) return Integer.MAX_VALUE;
            long res =ld(lend,lor);
            if (res>Integer.MAX_VALUE)
                return (flag>0)?Integer.MAX_VALUE:Integer.MIN_VALUE;
            else return (int)res*flag;
        }
        public long ld(long lend,long lor)
        {
            if (lend<lor) return 0;
            long sum = lor;
            long m = 1;
            //尝试将被除数分成两部分,其中一部分是小于被除数的m倍除数,需要不断尝试
            while (sum*2<lend)
            {
                sum+=sum;
                m+=m;
            }
            //将剩下的部分再分
            return m+ld(lend-sum,lor);
        }
  • 相关阅读:
    自控力和专注力是执行力的保证
    今宵又除夕
    买了小米盒子三代
    电容相位滞后?电感超前
    lcr电桥浅谈
    ad 线束和网络
    浅谈 R_S触发器
    NTSC PAL 介绍
    verilog 之流水灯
    io 口方向调整 stm32
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8466602.html
Copyright © 2020-2023  润新知