Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
比如我们想计算100/3的值,那么先找到一个3*2^n的数,这个数是最接近100并小于100的数,得到n = 5;
然后计算100 - 3*2^5 = 4,用相同的方法得到3*2^0;所以结果就是2^5+2^0 =33
#include<iostream>
using namespace std;
int divide(int dividend, int divisor)
{
if (divisor == 0) return INT_MAX;
if (divisor == 1) return dividend;
if (divisor == -1)
{
if (dividend == INT_MIN)
return INT_MAX;//负数范围为(-2147483647 - 1)
else
return -dividend;
}
int flag = -1;
if ((dividend < 0 && divisor < 0) || (dividend > 0 && divisor > 0))
flag = 1;
long long _dividend = abs((long long)dividend);
long long _divisor = abs((long long)divisor);
long long result = 0;
while (_divisor <= _dividend)
{
int cnt = 0;
long long tmp = _divisor;
while ((tmp <<= 1) <= _dividend)
++cnt;
result += (1 << cnt);
_dividend -= (tmp >> 1);
}
return (int)(flag * result);
}
int main()
{
cout << divide(2147483647, 2) << endl;
system("pause");
return 0;
}
需要注意的是,有些数要定义为long long型