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);
}

 

相关文章:

  • 2021-11-24
  • 2022-12-23
  • 2022-12-23
  • 2021-08-21
  • 2021-09-08
  • 2021-07-24
  • 2021-10-03
猜你喜欢
  • 2021-11-22
  • 2021-10-23
  • 2021-10-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案