leetcode 29. Divide Two Integers
计算两个数相除的结果, 不可以使用乘法除法和取余。 如果越界, 返回INT_MAX。
首先判断越界的情况, 如果除数为0, 显然越界。 还有一种是 被除数为-2147483648, 除数为-1, 这样结果为2147483648, 越界。
不能使用除法的话, 就只能用减法。 但是一个一个减显然太慢, 所以可以用二进制, 具体的方法看代码。
class Solution { public: int divide(int dividend, int divisor) { if(dividend == INT_MIN && divisor == -1) return INT_MAX; if(divisor == 0) return INT_MAX; unsigned int did = abs(dividend); unsigned int dis = abs(divisor); int ans = 0; while(did >= dis) { long long tmp = dis; int i; for(i = 0; tmp<=did; i++) { tmp <<= 1; } ans += (1<<(i-1)); did -= (dis<<(i-1)); } return (dividend>0 ^ divisor>0)?-ans:ans; //如果异或为0说明同号 } };