题目:
解答:
实现了一个正整数除法,使用加减和移位完成,然后将所有整数除法分类处理进入正整数除法函数内。
主要是要注意边界INT_MIN的特殊性。
代码:
class Solution {
public:
int divide_inner(int dividend, int divisor) {
if(divisor == 1) return dividend;
int x,y;
int ans = 0;
while(dividend >= divisor){
x = dividend;
y = 0;
while((x >> y) >= divisor){
++y;
}
dividend -= divisor << (y-1);
ans += 1 << (y-1);
}
return ans;
}
int divide(int dividend, int divisor){
if(dividend == divisor) return 1;
if(dividend < 0 && divisor < 0){
if(dividend == INT_MIN && divisor == -1) return INT_MAX;
if(dividend > divisor) return 0;
if(dividend == INT_MIN)
return divide_inner(-(dividend-divisor), -divisor) + 1;
return divide_inner(-dividend, -divisor);
}
if(dividend < 0 || divisor < 0){
if(dividend < 0) {
if(dividend == INT_MIN)
return -divide_inner(-(dividend+divisor), divisor) - 1;
else
return -divide_inner(-dividend, divisor);
}
else{
if(divisor == INT_MIN) return 0;
return -divide_inner(dividend, -divisor);
}
}
return divide_inner(dividend, divisor);
}
};
更新会同步在我的网站更新(https://zergzerg.cn/notes/webnotes/leetcode/index.html)