CINTA作业8

 int divide(int dividend, int divisor) {
        //handle result overflow
        if(dividend == INT_MIN && divisor == -1) return INT_MAX;//INT_MAX = 2^31-1,INT_MIN= -2^31 avoid overflow
        bool neg = (dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0);//Distinguish between positive and negative
        int ans = 0;

        //handle divisor overflow.
        if(divisor == INT_MIN) return dividend == INT_MIN;//当divisor为整数下限时,除了divided为整数下限时为1,其他均为0
        divisor = abs(divisor);

        //handle dividen overflow because we need to get the abs of dividend
        //just add a positive divisor to let it small(at least smaller than 2^32-1). remember to add 1 to ans!(because you have added one divisor)
        if(dividend == INT_MIN){
            ans++;
            dividend += divisor;
        }
        dividend = abs(dividend);
        //we must make sure that  (a << 1) > 0 or it will overflow when it is enough big.
        while(dividend >= divisor){
            int a = divisor;
            int m = 1;
            while((a << 1) > 0 && (a << 1) < dividend){
                a <<= 1;
                m <<= 1;
            }
            ans += m;
            dividend -= a;
        }
        return neg ? -ans : ans;
        
    }

 

相关文章:

  • 2021-06-09
  • 2022-01-27
  • 2021-08-10
  • 2021-10-27
  • 2022-02-27
猜你喜欢
  • 2021-09-29
  • 2021-10-15
相关资源
相似解决方案