因为负数的范围更大,所以用负数来表示商,同时特判商为-2^32的情况
用移位和减法来循环模拟除法,最多计算32次
PS:负数右移一位时
负奇数 和除以二结果不同(因为要除以二截断,但是和正数截断的方向不一致)
负偶数 和除以二结果相同
所以注意这点
class Solution {
public int divide(int dividend, int divisor) {
int r = (1<<30)-1;
r = r+r+1;
int l = -r-1;
if(dividend == l && divisor == -1)
return r;
if(divisor == l)
if(dividend == l)
return 1;
else
return 0;
int flag =1;
if(dividend <0 && divisor >0)
flag = 0;
if(dividend >0 && divisor <0)
flag = 0;
if (dividend>0)
dividend = -dividend;
if(divisor>0)
divisor = -divisor;
int ans = 0;
int mul = 1;
int base = divisor;
while((dividend/2) <= base){
// System.out.println("dividend>>1 " + (dividend/2));
// System.out.println("base " + base);
base<<=1;
mul<<=1;
}
while(dividend <= divisor && base<=divisor){
if(dividend <= base){
ans+=mul;
dividend -= base;
}
base>>=1;
mul>>=1;
}
if(flag == 0)
return -ans;
return ans;
}
}