用减法来实现除法,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;
    }
};