题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0
思路:
1.直接解,注意指数为负时的情况,结果为正指数时的倒数
class Solution {
public:
double Power(double base, int exponent) {
if(base == 0)
return 0;
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double res = 1.0;
for(int i = 0; i < abs(exponent); ++i){
res *= base;
}
if(exponent < 0)
res = 1.0 / res;
return res;
}
};
2.快速幂算法,比如16次方可以通过8次方的平方算出
当指数n为偶数时,a^n = a^(n/2) * a ^ (n/2),当n为奇数时,a^n = a^((n-1)/2) * a ^((n-1)/2) * a
class Solution {
public:
double Power(double base, int exponent) {
if(base == 0)
return 0;
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double res = Helper(base, abs(exponent));
if(exponent < 0)
res = 1.0 / res;
return res;
}
double Helper(double base, int exponent){//保证指数为正
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double res = Power(base, exponent >> 1);//指数n为偶数:a^n = a^(n/2) * a ^ (n/2)
res *= res;
if(exponent %2 == 1)//指数为奇数,再多乘一次
res *= base;
return res;
}
};