不能用乘除取模做除法。
思路:现在只有加减,位运算可以使用。 主要是用减法来实现除法:统计被除数可以减多少次除数。利用2分思想降低时间复杂度。再稍作边界条件判断,代码如下:
public class Solution {
public int div(long dividend, long divisor, long currentDivisor, long times)
{
if(dividend < divisor) return 0;
if(dividend >= currentDivisor)
{
return (int)times + div(dividend-currentDivisor, divisor, currentDivisor<<1, times<<1);
}
else
{
return div(dividend, divisor, currentDivisor>>1, times>>1);
}
}
public int divide(int dividend, int divisor) {
// Start typing your Java solution below
// DO NOT write main() function
long a = dividend, b = divisor;
if(b==0) return 0;
int flag = 1;
if(a < 0) { a = -a; flag = -flag;}
if(b < 0) { b = -b; flag = -flag;}
int re = div(a, b, b, 1);
if(flag == -1) re = -re;
return re;
}
}