总体思路是类似快速幂的思想,每次让b不断的翻倍,直到a比b小为止,再重置B的值不停继续,直到a比重置后的b小为止。
class Solution {
public:
int divide(int a, int b) {
bool flag = false;
long long x,y;
x = a;
if(a < 0){
flag = !flag;
x = -x;
}
y = b;
if(b < 0){
y = -y;
flag = !flag;
}
long long an = 0;
while(x >= y){
long long tempAn = 1;
long long tempNum = y;
while(x >= tempNum){
an += tempAn;
tempAn += tempAn;
x -= tempNum;
tempNum += tempNum;
}
}
if(flag){
an = -an;
}
if(an < INT_MIN || an > INT_MAX){
an = pow(2,31)-1;
}
return an;
}
};