如果溢出,返回 2147483647 。
您在真實的面試中是否遇到過這個題? Yes
樣例
給定被除數 = 100 ,除數 = 9,返回 11。
採用位運算,每次<<1等於*2,還要考慮到溢出的情況,int_max = 0x7FFFFFFF, int_min = 0x80000000。
class Solution {
public:
/**
* @param dividend the dividend
* @param divisor the divisor
* @return the result
*/
int divide(int dividend, int divisor) {
// Write your code here
if (divisor == 0)
return 2147483647;
if (dividend == 0)
return 0;
bool isN;
if ((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0))
isN = true;
else
isN = false;
long a = abs(long(divisor));
long n = 0;
long d = abs(long(dividend));
while (a <= d)
{
long a1 = a;
long n1 = 1;
while (d >= a1)
{
d -= a1;
n += n1;
n1 = n1 << 1;
a1 = a1 << 1;
}
}
if (isN)
n = n*-1;
if (n > 2147483647|| n < -2147483648)
return 2147483647;
return n;
}
};