029 Divide Two Integers

029 Divide Two Integers

class Solution:
    # @param {integer} dividend
    # @param {integer} divisor
    # @return {integer}
    def divide(self, dividend, divisor):
        intMax, intMin = 2147483647, -2147483648
        if dividend==0 or divisor == 0:
            return 0
        isNeg = (dividend * divisor < 0)
        dividend, divisor = abs(dividend), abs(divisor)
        ans = 0
        tmp = 1
        d = divisor
        while dividend >= divisor:
            if dividend >= d:
                dividend -= d
                ans += tmp
                tmp += tmp
                d += d
            else:
                tmp = 1
                d = divisor
        if isNeg:
            return max(-ans, intMin)
        return min(ans, intMax)
时间: 2024-11-09 00:46:08

029 Divide Two Integers的相关文章

[LeetCode] 029. Divide Two Integers (Medium) (C++/Python)

索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 029. Divide Two Integers (Medium) 链接: 题目:https://oj.leetcode.com/problems/divide-two-integers/ 代码(github):https://github.com/illuz/leetcode 题意: 实现除法,不能用乘.除和取模

LeetCode 029 Divide Two Integers

题目要求:Divide Two Integers Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 分析: 不能用乘.除和取余,则只能用减了…… 代码如下: class Solution { public: int divide(int dividend, int divisor) { // 当 dividend = INT

Java for LeetCode 029 Divide Two Integers

Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 解题思路: 既然不呢个用乘除和取模运算,只好采用移位运算,可以通过设置一个length代表divisor向左的做大移位数,直到大于dividend,然后对length做一个循环递减,dividend如果大于divisor即进行减法运算,同时result加上对应的值,注意边界条

29. Divide Two Integers

Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. (1) log int divide(int dividend, int divisor) { if(dividend == 0) return 0; if(divisor == 0) return INT_MAX; double t1 = log(fabs(dividend

Divide Two Integers

不能使用乘法,除法和mod operator,实现除法功能. Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 用减法可以实现,但是太慢了.算法里所做的优化都是为了节省时间. 不能忽视溢出的问题.例如,被除数是Integer.MIN_VALUE,除以-1,得到的结果对于Int型来说就溢出了,因此返回Integer.MAX_V

[LeetCode] Divide Two Integers

In this problem, we are asked to divide two integers. However, we are not allowed to use division, multiplication and mod operations. So, what else can be use? Well, bit manipulations. Let's look at an example and see how bit manipulation might help.

【leetcode】Divide Two Integers (middle)☆

Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 思路: 尼玛,各种通不过,开始用纯减法,超时了. 然后用递归,溢出了. 再然后终于开窍了,用循环,把被除数每次加倍去找答案,结果一遇到 -2147483648 就各种不行, 主要是这个数一求绝对值就溢出了. 再然后,受不了了,看答案. 发现,大家都用long long来解决溢

LeetCode --- 29. Divide Two Integers

题目链接:Divide Two Integers Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 这道题的要求是在不使用乘法.除法.取模运算的前提下实现两个整数相除.如果溢出,返回MAX_INT. 这道题的直接思路是用被除数不断减去除数,直到为0.这种方法的迭代次数是结果的大小,即比如结果为n,算法复杂度是O(n). 可以

【leetcode】Divide Two Integers

题目: Divide two integers without using multiplication, division and mod operator. 解析:不使用乘号.除号和余号实现两个整数的除法.该题可以利用移位操作数求解,主要分为三个步骤: (1)先求两个int类型整数的绝对值,注意要将int类型转化成long类型才能求绝对值:因为int类型的范围是-2147483648~2147483647,如果某个数为-2147483648,其绝对值会溢出. (2)对被除数a和除数b进行移位