LeetCode 29. Divide Two Integers
Description
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

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.
Code
- java
class Solution {
public int divide(int dividend, int divisor) {
int result = dividend / divisor;
if(dividend < 0 && divisor < 0 && result < 0) return Integer.MAX_VALUE;
return result;
}
}
- Others’ Soulution
- cpp
class Solution {
public:
int divide(int dividend, int divisor) {
if (dividend == INT_MIN && divisor == -1) {
return INT_MAX;
}
long dvd = labs(dividend), dvs = labs(divisor), ans = 0;
int sign = dividend > 0 ^ divisor > 0 ? -1 : 1;
while (dvd >= dvs) {
long temp = dvs, m = 1;
while (temp << 1 <= dvd) {
temp <<= 1;
m <<= 1;
}
dvd -= temp;
ans += m;
}
return sign * ans;
}
};
Conclusion
- 没想到除了除法/乘法/模运算以后做除法的方法,我是弟弟
- 注意两负数除法的溢出
- 学习评论区大佬的位运算除法
博客围绕不使用乘法、除法和模运算来实现两个整数相除展开。给出问题描述、示例及注意事项,如被除数和除数为32位有符号整数,除数不为0等。还给出Java和C++代码示例,最后提到学习评论区位运算除法及注意两负数除法溢出问题。

1033

被折叠的 条评论
为什么被折叠?



