幂运算。
如果单纯的循环+1计算肯定是不行的。
n可以分解成以2为底的幂的多项式形式。
比如n=40,可以分解成n = 32+8 = 2^5 + 2^3。 于是x^n = x^40 = x^32 + x^8。
这样逐位分析n,就可逐渐获得最终的Pow(x,n)。
需要注意的是当n为INT_MIN时,不能直接转化为-n,会溢出。
class Solution {
public:
double pow(double x, int n) {
if(n==INT_MIN)
return pow(x,n+1)/x;
if(n==0)
return 1;
if(x==0||x==1||n==1)
return x;
if(n<0)
return 1/pow(x,-n);
if(x<0)
return n%2==0?pow(-x,n):-pow(-x,n);
double res = 1;
while(n>0){
if(n&1)
res*=x;
n >>= 1;
x*=x;
}
return res;
}
};