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) {
if(!divisor || (dividend == INT_MIN && divisor == -1)) return INT_MAX;
int sign = (dividend < 0) ^ (divisor < 0) ? -1 : 1;
long long dvd = labs(dividend);
long long dvs = labs(divisor);
int res = 0;
while(dvd >= dvs){
long long cnt = 1;
long long temp = dvs << 1;
while(dvd > temp){
temp <<= 1;
cnt <<= 1;
}
res += cnt;
temp >>= 1;
dvd -= temp;
}
return (sign == 1) ? res :-res ;
}
};
整数除法算法实现
本文介绍了一种不使用乘法、除法和取模运算符实现整数除法的方法。通过位移和累加实现了高效的除法计算,并考虑了溢出情况。
1099

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



