Divide two integers without using multiplication, division and mod operator.
Java:
http://blog.csdn.net/linhuanmars/article/details/20024907
评论解读:
1.dividend==Integer.MIN_VALUE
我们知道对于int类型最小的整数比最大的整数绝对值大1, 所以如果要取绝对值进行统一处理, 那么就要单独一下处理最小整数的情况, 上面代码的做法是把它加一个除数让他可以取绝对值。dividend += Math.abs(divisor); 如果除数是负数, 加上绝对值就相当于减去一个除数了哈~
2. 为什么用((dividend^divisor)>>>31==1)? 判断正负
这里是判断两个整数是不是同号的简便写法, 你也可以写成乘法, 但是那样又有越界的可能, 而且乘法的计算复杂度比位运算要高。
public class Solution {
//beichushu,chushu
public int divide(int dividend, int divisor) {
if(divisor==0)
return Integer.MAX_VALUE;
int res=0;
if(dividend==Integer.MIN_VALUE)
{
res=1;
dividend+=Math.abs(divisor);
}
if(divisor==Integer.MIN_VALUE) return res;
boolean isNeg=((dividend^divisor)>>>31==1)?true:false;
dividend=Math.abs(dividend);
divisor=Math.abs(divisor);
int digit=0;
while(divisor<=(dividend>>1))
{
divisor<<=1;
digit++;
}
while(digit>=0)
{
if(dividend>=divisor)
{
dividend-=divisor;
res+=1<<digit;
}
divisor>>=1;
digit--;
}
return isNeg?-res:res;
}
}