1. 考虑double float 的相等,不能仅仅用==表示,是有精度限制的。
2. n 大于0,小于0的情况
3.
if (temp_diveded & 1)
result *= base;
base *= base;
temp_diveded >>= 1;
想法很赞!!!!
#define ACCURACY 0.0000001
class Solution {
public:
double pow(double x, int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (n == 0)
return 1.0;
if (n==1)
return x;
if (equal(x, 1.0))
return x;
if (equal(x,-1.0)){
if (n%2 == 0 )
return abs(x);
else
return -abs(x);
}
if (n < 0)
return 1.0/pow(x, -n);
double result = 1;
double base = x;
int temp_diveded = n;
while (temp_diveded){
if (temp_diveded & 1)
result *= base;
base *= base;
temp_diveded >>= 1;
}
return result;
}
bool equal(double x, double y){
return abs(x-y) <= ACCURACY;
}
};