zoukankan      html  css  js  c++  java
  • 29. 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.

    Example 1:

    Input: dividend = 10, divisor = 3
    Output: 3

    Example 2:

    Input: dividend = 7, divisor = -3
    Output: -2

    Note:

    • Both dividend and divisor will be 32-bit signed integers.
    • The divisor will never be 0.
    • Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231,  231 − 1]. For the purpose of this problem, assume that your function returns 231 − 1 when the division result overflows.

    只能用加减来实现除法-> recutsion。主要考虑以下几种情况:

    1. 溢出 -> 用long

    2. 被除数为0 或者 被除数小于除数 -> 返回0

    3. 符号问题

    time: O(logn), space: O(logn)

    class Solution {
        public int divide(int dividend, int divisor) {
            int sign = 1;
            if((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0)) sign = -1;
            
            long longdividend = Math.abs((long)dividend);
            long longdivisor = Math.abs((long)divisor);
            if(longdividend == 0 || longdividend < longdivisor) return 0;
            
            long longres = helper(longdividend, longdivisor);
            
            int res = (int)longres;
            if(longres > Integer.MAX_VALUE) {
                res = sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            return sign * res;
        }
        public long helper(long dividend, long divisor) {
            if(dividend < divisor) return 0;
            long sum = divisor;
            long multiple = 1;
            while(sum + sum <= dividend) {
                sum += sum;
                multiple += multiple;
            }
            return multiple + helper(dividend - sum, divisor);
        }
    }
  • 相关阅读:
    第一次编程作业
    第一次博客作业
    软工回顾与总结
    百度OCR技术博客
    BUAA2020软工个人博客作业2-软件
    2020软工结队项目作业
    2020软工个人项目作业
    2020软件工程第一次个人博客作业
    2020软件工程热身作业
    OO完结篇-第四单元小结
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10135208.html
Copyright © 2011-2022 走看看