用减法来实现除法,a/b就是看a可以最多减去多少个b。
优化,可以对b进行左移n位得到c,只要c比a小。这样a可以一次减去c,也即一次减去了2的n次方个b。
class Solution {
public:
int divide(int dividend, int divisor) {
int tag = 1;
if (dividend < 0)
{
tag = -1;
dividend = abs(dividend);
}
if (divisor < 0)
{
tag *= -1;
divisor = abs(divisor);
}
int divisorTmp = divisor;
int cnt = 0;
while (dividend >= divisor)
{
int cntTmp = 1;
while ((divisor << 1) <= dividend)
{
divisor <<= 1;
cntTmp <<= 1;
}
dividend -= divisor;
cnt += cntTmp;
divisor = divisorTmp;
}
return cnt * tag;
}
};