只能说这个题目很贱。主要是-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;
}
}
本文探讨了如何使用二分法解决整数除法问题,特别关注负数除法时的边界条件处理。通过引入long类型来避免整型溢出,实现了一个高效的整数除法算法。
2867

被折叠的 条评论
为什么被折叠?



