LeetCode系列(十)-Divide Two Integers

  Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator.

  Return the quotient after dividing dividend by divisor.

  The integer division should truncate toward zero.

示例:

  Input: dividend = 10, divisor = 3

  Output: 3

解法:

首先想到的是由加减代替乘除,但是在遇到大数的时候发生了TimeOut。因此使用位运算来加快运算。

public int divide(int dividend, int divisor) {
        // 溢出处理
        if (divisor==0 || (dividend==Integer.MIN_VALUE&&divisor==-1)) {
            return Integer.MAX_VALUE;
        }
        // 符号判断
        boolean sign = (dividend<0&&divisor<0)||(dividend>0&&divisor>0);
        // 正值转换
        long dvd = Math.abs((long)dividend);
        long dvs = Math.abs((long)divisor);
        // 结果
        int result = 0;
        // 计算
        while(dvd>=dvs) {
            // 除数
            long tmp = dvs;
            //
            int count = 1;
            while (dvd >= (tmp<<1)) {
                tmp <<= 1;
                count <<= 1;
            }
            dvd -= tmp;
            result += count;
        }
        
        return sign?result:-result;
    }

 

posted @ 2018-10-09 09:50  天才小彩笔i  阅读(100)  评论(0编辑  收藏  举报