class Solution {
public:
int divide(int dividend, int divisor) {
double maxint = pow(2, 31) - 1;
double minint = -1*pow(2, 31);
if(divisor==0)
return maxint;
int signal=((dividend<0)^(divisor<0))?-1:1;
long long m=abs((long long)dividend),n=abs((long long)divisor),res=0;
if(n==1)//等于1这三种情况考虑不周
{
if(signal*m>maxint)
return maxint;
else if(signal*m<minint)
return minint;
else
return signal*m;
}
while(m>=n)
{
long long tmp=n,tres=1;
while(m>=(tmp<<1))
{
tmp<<=1;
tres<<=1;
}
m-=tmp;
res+=tres;
}
if(res>maxint)
return signal*maxint;
return signal*res;
}
};
public:
int divide(int dividend, int divisor) {
double maxint = pow(2, 31) - 1;
double minint = -1*pow(2, 31);
if(divisor==0)
return maxint;
int signal=((dividend<0)^(divisor<0))?-1:1;
long long m=abs((long long)dividend),n=abs((long long)divisor),res=0;
if(n==1)//等于1这三种情况考虑不周
{
if(signal*m>maxint)
return maxint;
else if(signal*m<minint)
return minint;
else
return signal*m;
}
while(m>=n)
{
long long tmp=n,tres=1;
while(m>=(tmp<<1))
{
tmp<<=1;
tres<<=1;
}
m-=tmp;
res+=tres;
}
if(res>maxint)
return signal*maxint;
return signal*res;
}
};