414. Divide Two Integers

int divide(int dividend, int divisor) { // write your code here if(divisor == 0){ return dividend > 0 ? INT_MAX : INT_MIN; } if(dividend == 0) { return 0; } if(divisor == 1){ return dividend; } if(dividend == INT_MIN && divisor == -1){ return INT_MAX; } //这个特例很奇怪,不容易想到 bool isNeg = ((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0)); long long a = abs((long long)(dividend)); long long b = abs((long long)(divisor)); long long res = 0; while(a >= b){ int shift = 0; while(a >= (b << shift)){ shift++; } a -= (b << (shift - 1)); res += (long long)(1 << (shift - 1)); } return isNeg ? -res : res; }

Comments

Popular posts from this blog

算法的比较