29. 两数相除
- 先除数依次乘2(对应的加法操作就是依次往上加操作),直到越界,算作是此次能数出来的除数的最多的个数
- 被除数减去这个数值,再继续数,重复之前的操作,直到被除数小于除为止。
- 对于越界情况,我们需要找一个位数更大存储类型来存储这个数
运用了递归调用
class Solution {
public:
//dividend被除数,divisor除数
//
int divR(long long dividend, long long divisor)
{
if (dividend < divisor)
{
return 0;
}
long long numCur = divisor;
int result = 1;
while (dividend > numCur + numCur)
{
result += result;//result=2*result 存储找到了多少个divisor
numCur += numCur;
if (numCur > INT_MAX / 2)
{
break;
}
}
result += divR(dividend - numCur, divisor);
return result;
}
int divide(int dividend, int divisor)
{
if ((dividend == INT_MIN || dividend == INT_MAX) && divisor == (-1))
{
return INT_MAX;
}
if (divisor==1)
{
return dividend;
}
long long _dividend = dividend;
long long _divisor = divisor;
bool sign = (dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0);
_dividend = _dividend > 0 ? _dividend : -_dividend;
_divisor = _divisor > 0 ? _divisor : -_divisor;
if (sign == true)
{
return divR(_dividend, _divisor);
}
else
{
return -divR(_dividend, _divisor);
}
}
};