【题目描述】
AcWing 27. 数值的整数次方
【思路】
注意指数为负数的情况 变为正数幂的倒数
然后注意一些边界 x == 0时其幂为0,指数n==0时 x^n为1
快速幂求解,时间复杂度为O(log n)
class Solution {
public double quick_pow(double x, int n){
double ans = 1.0 ,pingfang = x;
while(n > 0){// 3 2 1 4
if( (n & 1) == 1){//最后n==1时 ans 乘以了 x^n或者x^(n - 1)
ans *= pingfang;//翻一倍
}
//变为原来平方倍
pingfang *= pingfang;
n /= 2;
}
return ans;
}
public double Power(double x, int n) {
if(x == 0) return 0;
if(n == 0) return 1.0;
if( n < 0) {
n = - n;
return 1.0 /quick_pow(x, n);
}
return quick_pow(x, n);
}
}