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);
        }
    }
  • 相关阅读:
    Serilog 动态添加自定义属性
    C# 序列化与反序列化
    幂等设计
    服务无状态
    vue 显示 mysql 数据库表 Demo
    C# 调用 linux 函数 —— Linux 头文件目录位置
    创建可以在 Zynq 上运行的动态库
    C# 获取所在函数名
    Linux 关闭终端不结束进程
    C# 自动生成版本号
  • 原文地址:https://www.cnblogs.com/skillking/p/9433490.html
Copyright © 2011-2022 走看看