C++代码:
#include <iostream>
#include <limits>
using namespace std;
class Solution {
public:
int divide(int dividend, int divisor) {
/*1. 将int转换成long long int可以省事,例如当被除数与
但long long int可以*/
/*2. -2147483648为最小的int,而最大的int为2147483647,
故需要先强制类型转换为double*/
long long int a = abs((double)dividend);
long long int b = abs((double)divisor);
long long int ret = 0;
long long int c;
while(a>=b)
{
/* 3. 注意这里c要申明为long long int,否则有可能移位之后
变为0,从而形成死循环*/
c = b;
for (int i=0;a>=c;++i,c<<=1)
{
a -= c;
ret += 1<<i;
}
}
//将dividend和divisor抑或运算,最高位即表示为结果的符号位
ret = ( (dividend^divisor) >> 31 )? (-ret) : ret;
return ( (ret > INT_MAX || ret < INT_MIN)? INT_MAX : ret );
}
};
int main()
{
Solution s;
int a = -2147483648;
int b = -1;
cout<<s.divide(a, b)<<endl;
return 0;
}