题目大意:计算x的n次方
题目的一个解法可以用二分的思想比较普遍
题目的第二个解法可以借鉴网络传输窗口的传输阈值变化方法
第一个方法的代码如下:
class Solution {
public:
double pow(double x, int n) {
if(n<0)
{
n=-n;
x=1/x;
}
if(n==0)
return 1;
if(n==1)
return x;
double tmp;
if(n%2==1)
{
tmp=pow(x,(n-1)/2);
return tmp*tmp*x;
}
tmp=pow(x,n/2);
tmp*tmp;
}
};
第二个方法的解法如下:
class Solution {
public:
double pow(double x, int n) {
if(n==0)return 1.0000;
if(n<0)
{
n=-n;
x=1.00/x;
}
double tmp=1.00000;
double mult=x;
int dec=1;
while(n)
{
tmp*=mult;
n-=dec;
if(n>=2*dec)
{
dec*=2;
mult*=mult;
}else
{
dec=1;
mult=x;
}
if((tmp<0.00000001 && tmp>-0.00000001) || tmp==1.000000)
return tmp;
}
return tmp;
}
};
//刚刚传错了
同时提交情况下,第二种方法时间更优。另外也是一种非迭代方法。