class Solution {
public:
int divide(int dividend, int divisor) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (divisor == 0)
return INT_MAX;
bool negative = (dividend > 0) == (divisor > 0) ? false: true;
unsigned int copyed_value = dividend;
unsigned int absDividend = (copyed_value > 0x80000000) ? -dividend : copyed_value;
copyed_value = divisor;
long long absDivisor = (copyed_value > 0x80000000) ? -divisor : copyed_value;
int result=divideHelp(absDividend,absDivisor);
return negative? -result : result;
}
unsigned int divideHelp(unsigned int dividend, unsigned int divisor){
int result = 0;
while (dividend >= divisor){
unsigned int divisortemp = divisor;
int tempresult = 1;
while( (divisortemp <= (INT_MAX/2+1)) && (dividend > divisortemp + divisortemp)){
tempresult <<= 1;
divisortemp += divisortemp;
}
if (tempresult > 1){
result +=tempresult;
dividend -= divisortemp;
}
if (dividend >= divisor){
result +=1;
dividend -= divisor;
}
}
return result;
}
};
1. 如何取绝对值
2. while 循环里对
divisortemp + divisortemp
的divisortemp的溢出判断
3. 第一个while循环里的 >= , 以及里面最后一个 if (dividend >= divisor)的 位置