leetcode记录29. Divide Two Integers

29. Divide Two Integers


√ Accepted
  √ 989/989 cases passed (4 ms)
  √ Your runtime beats 100 % of cpp submissions
  √ Your memory usage beats 99.38 % of cpp submissions (8.3 MB)
/*

 * @lc app=leetcode id=29 lang=cpp
 *
 * [29] Divide Two Integers
 */
class Solution {
public:
    int divide(int dividend, int divisor) {
        bool flag = 1;
        if(divisor == 0) {
            return pow(2, 31)-1;
        }

        int result = 0;
        int minval = -pow(2, 31);
        if(dividend == minval && divisor == -1) {
                return pow(2, 31)-1;
        }
        if(dividend == minval && divisor == 1) {
                return minval;
        }
        if(dividend != minval && divisor == minval){
            return 0;
        }
        if(dividend == minval && divisor == minval){
            return 1;
        }
        if(dividend == minval){
            dividend = dividend + abs(divisor);
            result += 1;
        }


        if((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0)){
            flag = 0;
        }
        dividend = abs(dividend);
        divisor = abs(divisor);

        int base = 1;
        int temp = divisor;
        while(dividend >= temp){
            if(dividend >= divisor){
                dividend -= divisor;
                result += base;
                divisor <<= 1;
                base <<= 1;
            }else
            {
                divisor >>= 1;
                base >>= 1;
            }
        }
        
        if (flag == 0) {
            result = -result;
        }
        
        return result;
    }
};


猜你喜欢

转载自blog.csdn.net/csdn_47/article/details/89787489