实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
-100.0 < x < 100.0
-231 <= n <= 231-1
-104 <= xn <= 104
看到求多次幂,想到使用快速幂算法,相对于快速幂算法模板,看到幂数n有负数存在的情况,因此,分别讨论。
当n较大时,可使用快速幂:
若n为偶数, base^n = base^(n/2) * base^(n/2);
若n为奇数, base^n = base * base^((n-1)/2) * base^((n-1)/2);
double PowerWithUnsignedN(double base, unsigned int n)
{
if (0 == n) return 1;
if (1 == n) return base;
double res = PowerWithUnsignedN(base, n>>1);
res *= res;
if (n & 1) //n为奇数
res *= base;
return res;
}
可以看到多了一部分判断负数的代码
class Solution {
public:
double myPow(double x, int n) {
if(n==1)
return x;
if(n==0)
return 1;
if(n==-1)
return 1/x;
double res=myPow(x,n/2);
res*=res;
if(n&1)
{
if(n>0)
res*=x;
else
res/=x;
}
return res;
}
};
原文:https://www.cnblogs.com/zengfanlu/p/14641820.html