zoukankan      html  css  js  c++  java
  • 29. Divide Two Integers

    一、题目

      1、审题

        

      2、分析

        不适使用乘除、取余符号,求 int 型被除数除以除数所得的商。其中,商可能涉及溢出 int 范围。

    二、解答

      1、思路:

        a、int 型数据范围为 -2147483648 到 2147483647 。故,当商为 2147483648时,整数无法表示,故想办法将被除数与除数换成 long 型进行计算。即另外写一个满足的方法;

        b、进行除法运算时,采用 被除数循环减去除数来计算减去的趟数时,抛出运行超时异常。故每次减去的除数应该依次扩大。

        c、 n 为int 型时, Math.abs(-2147483648) 仍等于 -2147483648;

    class Solution {
        public int divide(int dividend, int divisor) {
    
            long result = divideLog(dividend, divisor);
    
            if(result > Integer.MAX_VALUE)
                return Integer.MAX_VALUE;
    
            return (int)result;
        }
        
        private long divideLog(long dividend, long divisor) {
    
            if(dividend == divisor)
                return 1;
    
            boolean isNegative = (dividend < 0) != (divisor < 0);   // 判断是否两数异号
            dividend = dividend > 0 ? dividend : -dividend;     // 取正
            divisor = divisor > 0 ? divisor : -divisor;
    
            if(dividend < divisor || divisor == 0)
                return 0;
    
            long result = 1, sum = divisor;
            while((sum + sum) <= dividend) {
                sum += sum;
                result += result;
            }
    
            if(isNegative)
                return -(result + divideLog(dividend - sum, divisor));
            else
                return result + divideLog(dividend - sum, divisor);
        }
    }
  • 相关阅读:
    《逍遥法外》观后感
    1237. 螺旋折线
    P2196 挖地雷
    787. 归并排序
    466. 回文日期
    P1032 字串变换
    P1825 [USACO11OPEN]Corn Maze S
    P1162 填涂颜色
    P1101 单词方阵
    P1019 单词接龙
  • 原文地址:https://www.cnblogs.com/skillking/p/9433490.html
Copyright © 2011-2022 走看看