leetcode 29:两数相除
通过使用位运算可以解决该问题
需要注意的是当dividend=INT_MIN和divisor=-1时 得到的商将会溢出
任何一个整数都可以表示成以2的幂为底的一组基的线性组合
每次将除数左移到大于被除数的上一位,使用被除数减去移位之后的数, 持续这个直到基为0
int divide(int dividend,int divisor){
if(dividend==INT_MIN&&divisor==-1)
return INT_MAX;
long d=std::abs(long(dividend));
long b=std::abs(long(divisor));
long res=0;
if(b==1)
return (int)(((dividend<0)^(divisor<0))?d*-1:d);
while(d>=b){
long tmp=b;
long p=1;
while(d>=(tmp<<1)){
tmp<<=1;
p<<=1;
}
d-=tmp;
res+=p;
}
return (int)(((dividend<0)^(divisor<0))?-res:res);
}