Leetcode 29. Divide Two Integers
2018-01-16 21:00
357 查看
29. Divide Two Integers
Divide two integers without using multiplication, division and mod operator.If it is overflow, return MAX_INT.
题目链接:https://leetcode.com/problems/divide-two-integers/description/
题目大意:不使用“ / ”、“ % ”、“ * ” 三种运算符,求两个数的商。
解题思路:用减法求,如果被除数 b 减 n 次除数 a 后为 0,则两个数的商为 n 。但逐次相减会超时,因此用到为运算“ << ”。a << 1表示数字 a 的二进制向左移动一位,右边用 0 补齐,也就是等于 a * 2,因此不必逐次减 a ,可以先计算 a 的2 ^ n 的倍数,再用减法计算。这题要注意一些细节,int 会发生溢出,中间变量用long long存储。
代码:
class Solution { public: int divide(int dividend, int divisor) { bool flag = true; if (dividend == INT_MIN && divisor == -1) return INT_MAX; if (divisor == 1) return dividend; if (divisor < 0 && dividend > 0 || divisor > 0 && dividend < 0) flag = false; long long a = fabs(dividend); long long b = fabs(divisor); if(a < b) return 0; long long ans = 0; while(a > b){ long long cur = 1; long long c = b; while(a > (c << 1)){ c = c << 1; cur += cur; } ans += cur; a -= c; } while(a >= b){ a -= b; ans ++; } if(flag) return ans; else return -ans; } };
相关文章推荐
- LeetCode 29 - Divide Two Integers
- [leetcode: Python]29. Divide Two Integers
- LeetCode - 29. Divide Two Integers
- leetcode 29. Divide Two Integers
- LeetCode 29 - Divide Two Integers
- Java [leetcode 29]Divide Two Integers
- (Java)LeetCode-29. Divide Two Integers
- [LeetCode]29. Divide Two Integers
- 29 leetcode - Divide Two Integers
- Leetcode||29. Divide Two Integers
- LeetCode 29. Divide Two Integers
- LeetCode 29 Divide Two Integers (不使用乘法,除法,求模计算两个数的除法)
- Leetcode 29. Divide Two Integers (Medium) (cpp)
- [LeetCode-29] Divide Two Integers(两个整数相除,不能使用乘除取余算术符)
- LeetCode-29-Divide Two Integers 智障题
- leetcode 29. Divide Two Integers
- [leetcode 29]divide two integers
- 【LeetCode】29. Divide Two Integers
- LeetCode 29. Divide Two Integers(整数除法)
- LeetCode(29) Divide Two Integers