Divide Two Integers

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

边界条件需要仔细注意:

  • 1<<32,如果没有指定是int,就会返回INT_MIN
  • 对于equal情况,k也要++

以下代码不是最优最精简的

 class Solution {
 public:
     int divide(int dividend, int divisor) {
         if (dividend == 0)return 0;

         long long lup = dividend;
         long long ldown = divisor;

         long long aup = abs(lup), adown = abs(ldown);


         int sign = (((dividend>0) && (divisor>0)) || ((dividend<0) && (divisor<0))) ? 1 : -1;

         if (adown>aup)return 0;
         if (adown == aup)return sign;

         int k = 1;
         // this should be <= because you will minus one later
         while ((adown << k) <= aup)
         {
             ++k;
         }

         --k;

         long long ret = 0;

         while (aup >= adown && k >= 0)
         {
             if (adown << k <= aup)
             {
                 ret += ((long long)1 << k);
                 aup -= (adown << k);
             }
             k--;
         }

         ret *= sign;

         if (ret >= INT_MAX)return INT_MAX;
         else if (ret <= INT_MIN)return INT_MIN;
         return ret;
     }
 };

results matching ""

    No results matching ""