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;
}