题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路1
循环只需要考虑以下情况就行了:
(1)base为零的情况,此时应该返回0或者无意义。
(2)exponent为负数的情况
(3)时间复杂度O(n)
思路1的代码
class Solution {
public:
double Power(double base, int exponent) {
if (base == 0)
return 0;
if (exponent == 0)
return 1;
bool bMinus = exponent > 0 ? 0 : 1;
int i;
double rlt = 1;
for (i = 0; i < abs(exponent); ++i){
rlt *= base;
}
if (bMinus)
rlt = 1 / rlt;
return rlt;
}
};
思路2
递归求解。所以时间复杂度为O(logN)。同时位运算可以加快计算速度。
思路2的代码
class Solution {
public:
double Power(double base, int exponent) {
if (base == 0) return 0;
if (exponent == 0) return 1;
if (exponent == 1) return base;
bool bNegative = false;
if (exponent < 0){
exponent *= -1;
bNegative = true;
}
int value = Power(base*base, exponent >> 1);
if (exponent & 0x1)
value *= base;
return bNegative ? 1.0/value : value;
}
};