/给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0/
解法一:循环求解
class Solution {
public:
double Power(double base, int exponent) {
if (base == 0)
return 0.0;
if (exponent == 0)
return 1.0;
//整数包含负数,2^-3=(1/2)^3;
if (exponent < 0) {
base = 1.0 / base;
exponent = -exponent;
}
double ret = 1.0;
for (int i = 0; i < exponent; ++i) {
ret *= base;
}
return ret;
}
};
解法二:快速幂
//如:28=(24)^2; 24=(22)^2; 即2n=(2n/2)^2;
//上述只适用于偶数,奇数为2n=(2n/2)^2*base;即只需要多乘一次base即可
class Solution {
public:
double ret = 1.0;
//保存base
double b = 0.0;
double power(double base, int exponent) {
if (exponent == 1)
return base;
if (exponent == 0)
return 1.0;
//计算base^(exponent/2);
ret = power(base, exponent);
//区分奇数偶数情况
if (exponent & 1) {
return ret * ret * b;
}
else
return ret * ret;
}
double Power(double base, int exponent) {
if (base == 0)
return 0.0;
if (exponent == 0)
return 1.0;
//整数包含负数,2^-3=(1/2)^3;
if (exponent < 0) {
base = 1.0 / base;
exponent = -exponent;
}
b = base;
return power(base, exponent);
}
};