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);
        }
    }
  • 相关阅读:
    Altium Designer 出现错误提示(警告)adding items to hidden net GND/VCC
    proteus 查找 仿真元件 中英文对照 [持续更新]
    proteus 运行出错,用户名不可使用中文!
    proteus汉化
    proteus怎么仿真?
    keil 怎样新建工程,编写代码?
    raspberry pi2 智能小车源码及测试视频
    项目优化
    PHP composer
    腾讯云通信接入
  • 原文地址:https://www.cnblogs.com/skillking/p/9433490.html
Copyright © 2011-2022 走看看