题目:
想法:
使用减法替代除法
注意边界! 注意int的取值范围!!!
代码:
class Solution {
public int divide(int a, int b) {
boolean sign=true;
int count=0;
//计算int数值范围的最大 最小值
int max = (int)Math.pow(2,31);
int min = -(int)Math.pow(2,31)-1;
//判断边界情况
if(a == min && b == -1)
return max;
if(a == min && b == 1)
return min;
if(b==min && a!=min)
return 0;
//如果异号则置符号位为负
if((a > 0 && b < 0) || (a < 0 && b > 0)){
sign = false;
}
//将ab全转换成正数
a = a>0 ? a : -a;
b = b>0 ? b : -b;
//负边界单独取"反"
if(a==min){
a=max;
//特殊情况 还在思考为什么...
if(b==2 || b==4)
count++;
}
if(b==min){
b=max;
}
//再次判断 部分用例可直接跳出
if(a<b)
return 0;
//利用移位达到相除的效果
//最多移位31位
for(int i=31;i>=0;i--){
//判断是否需要相减
while((a>>i)>=b){
a-=(b<<i);
count+=(1<<i);
}
}
//置符号位
if(sign)
return count;
else
return -count;
}
}
结果: