题目: Divide Two Integers
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
如被除数是100,除数是9,则100=9*8+9*2+9*1+1,即是100=9*2^3 + 9*2^1 + 9*2^0+1。
但是最后面的1是比9小的,所以相除的时候,就只有8+2+1=11个9了,即相除之后是11.
用移位的方法去做,如果被除数大于除数,然后每次都是把除数扩大到原来的2倍,被除数减去除数后,然后
被除数和新的除数比较,直到被除数小于除数;
然后使除数归为原始值,继续。。。。。
为了帮助理解,我自己用100和9做了个例子,然后在草稿纸上演算了一遍。
代码:
int divide(int dividend, int divisor) {
// Note: The Solution object is instantiated only once.
long long a=dividend;
long long b=divisor;
if(dividend<0)
{
a=(-a);
}
if(divisor<0)
{
b=(-b);
}
long long res = 0;
while(a >= b)
{
long long c = b;
for(int i = 0; a >= c; i++, c <<=1)
{
a -= c;
res += 1<<i;
}
}
int flag=((dividend ^ divisor) >> 31);
if(flag==0)
{
if(res>INT_MAX)
{
return INT_MAX;
}
else
{
return res;
}
}
else
{
return -res;
}
}