刚看到这个题目,三下五除二用for语句写了出来,
主体代码如下:
class Solution {
public:
double pow(double x,int n)
{
double result = 1.0;
for(int i = 0; i < n; i++)
result *=x;
return result;
}
};
提交上去后报时间太长,用x = 0.000001,n = 34345632测试,总共花了8765秒===
于是改成二分法,还是花了如上一半的时间,想起应该用递归来做的==
又忘了考虑n为负数的情况==
综上,要考虑花费的时间,考虑n的取值~下面是AC的代码
class Solution {
public:
double pow1(double x, unsigned int n)
{
double d = 1.0;
if(n == 0)
return 1.0;
d = pow1(x,n/2);
if(n % 2 == 0)
d = d * d;
else
d = d * d * x;
return d;
}
double pow(double x,int n)
{
double result;
int d = n;
if(d < 0)
d = -d;
result = pow1(x,d);
if(n < 0)
result = 1.0/result;
return result;
}
};