Skip to content

Instantly share code, notes, and snippets.

@superlayone
Last active August 29, 2015 14:01
Show Gist options
  • Select an option

  • Save superlayone/141e34d2db56a89ee0e8 to your computer and use it in GitHub Desktop.

Select an option

Save superlayone/141e34d2db56a89ee0e8 to your computer and use it in GitHub Desktop.
Divide Two Integers

##Divide Two Integers

不使用乘法、除法以及取余操作对两个数执行除法操作

思路

a/b=exp( log(a/b) )=exp( log(a) - log(b) )

代码

class Solution {
public:
    int divide(int dividend, int divisor) {
        if(dividend == 0){
            return 0;
        }
        if(divisor == 1){
            return dividend;
        }
        if(dividend == divisor){
            return 1;
        }
        if(divisor == 2){
            return dividend >> 1;
        }
        
        bool sign = false;
        if((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0)){
            sign = true;
        }
        if(dividend == INT_MAX && divisor == INT_MIN)
		{
            return 0;
		}

		dividend = dividend ==INT_MIN ? INT_MAX : abs(dividend);  
        divisor = divisor == INT_MIN ? INT_MAX : abs(divisor); 
        int result = (int) floor(exp(log(dividend) - log(divisor)));  
        return sign ? -result : result;  
    }
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment