面试题16:数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:方法1,直接求,注意任意数的0次方等于1,负数的次方等于它的倒数(时间复杂度O(n))。方法2,利用平方的性质,a^n=a^(n/2) * a^(n/2)或a^n=a^(n-1/2) * a^(n-1/2)*a(分别为偶数、奇数的情况)(时间复杂度O(logn))
代码一(直接求):
class Solution {
public:
double Power(double base, int exponent) {
double sum = 1;
if(exponent > 0)
while(exponent--) sum *= base;
else if(exponent < 0){
exponent = -exponent;
while(exponent--) sum *= base;
sum = 1.0 / sum;
}
return sum;
}
};
代码二(利用性质):
class Solution {
public:
double Power(double base, int exponent) {
if(exponent == 0) return 1;
if(exponent == 1) return base;
int n = exponent > 0 ? exponent : -exponent;
double res = Power(base, n >> 1);
res *= res;
if(n & 1) res *= base;
if(exponent < 0) res = 1 / res;
return res;
}
};