每次除数增倍,直到除数大于被除数,此时并没有结束,再重新尝试从原始的除数开始增倍。知道被除数小于原始除数为止。
class Solution {
public:
int divide(int dividend, int divisor) {
bool positive = true;
unsigned int aa, bb;
if(dividend < 0)
{
positive = !positive;
aa = 0-dividend;
}
else
aa = dividend;
if(divisor < 0)
{
positive = !positive;
bb = 0-divisor;
}
else
bb = divisor;
long result = 0;
while(aa >= bb)
{
int multi = 1;
unsigned int bbb = bb;
while(aa >= bbb)
{
aa -= bbb;
result += multi;
if(bbb < INT_MAX >> 1)
{
bbb += bbb;
multi += multi;
}
}
}
return positive?result:(0-result);
}
};
大数相除:
http://www.melory.me/2013/03/09/%E5%A4%A7%E6%95%B0%E9%99%A4%E6%B3%95%E8%BF%90%E7%AE%97/