题意:不使用除法操作完成整除运算。
思路:采用和快速幂相类似的做法。注意边界处理。
class Solution {
public:
int divide(int dividend, int divisor) {
long df = 0;
long tempd = dividend;
long tempdi = divisor;
if(divisor < 0) tempdi = -tempdi;
if(dividend < 0) tempd = -tempd;
while(tempd >= tempdi) {
long temp;
tempd = div(tempd, tempdi, temp);
df += temp;
}
//if(df >= 2147483647) return 2147483647;
if(dividend < 0 && divisor >0) {
if(-df <=-2147483648){
return -2147483648;
}
return -df;
}
else if(dividend > 0 && divisor < 0) {
if(-df <=-2147483648){
return -2147483648;
}
return -df;
}
else if (dividend < 0 && divisor < 0){
if(df >= 2147483647) return 2147483647;
return df;
}
else{
if(df >= 2147483647) return 2147483647;
return df;
}
}
long div(long d, long dr, long &r) {
long tr = 1;
long ttr = 0;
while(d - dr >= 0) {
d -= dr;
dr += dr;
ttr += tr;
tr += tr;
}
r = ttr;
return d;
}
};