Divide two integers without using multiplication, division and mod operator.
//这题要求不要用“/”来直接计算两个数的相除的值,那么,可以利用减法和位运算来实现。
//比如,将1右移,可以得到 2 4 8 16 32...直到找到一个比divisor小且最大数tmp,然后
//剩下的就是利用divisor-tmp,然后再判断div是否小于这个数。如果,小于重复上面的步骤。否则,得到最后的结果.
class Solution {
public:
int divide(int dividend, int divisor) {
int pre = 1;
if((long long)dividend * divisor < 0) pre = -1;
long long tmp = 0;
long long divid = abs((long long)dividend);
long long div = abs((long long)divisor);
int res = 0;
while(div <= divid)
{
tmp = div;
int cnt = 1;
while((tmp <<= 1) < divid)
{
cnt <<= 1;
}
res += cnt;
divid -= (tmp >>= 1);
}
#if 1
std::cout << res * pre << std::endl;
#endif // 1
return res * pre;
}
};