只能说这个题目很贱。主要是-2^32变成绝对值之后会超出int的界,所以用long 来存
dd=Math.abs((long)dividend);
dr=Math.abs((long)divisor);
解题想法原来是:divide(dividend, divisor)=divide(dividend/2, divisor)+divide(dividend/2, divisor)
用二分法,不过奇偶数考虑挺麻烦的,于是每次(除数*2),比如100/17,先算出17*4<100,17*8>100
然后再算(100-17*4)=32/17,这样得到4+1=5.
public class Solution {
public int divide(int dividend, int divisor) {int i=1;
int rst=0;
int sign=1;
long dd,dr;
dd=Math.abs((long)dividend);
dr=Math.abs((long)divisor);
if(dividend<0)
sign*=-1;
if(divisor<0)
sign*=-1;
long tmp=dr;
while(tmp<=dd)
{
while(tmp<=dd/2)
{
tmp+=tmp;
i+=i;
}
rst+=i;
i=1;
dd-=tmp;
tmp=dr;
}
return rst*sign;
}
}