题目描述
给定一个doubledoubledouble类型的浮点数basebasebase和intintint类型的整数exponentexponentexponent。求basebasebase的exponentexponentexponent次方。
分析:主要考查对于细节的把握。当basebasebase为000时,当幂数exponentexponentexponent为000或者负数时无意义,其余皆为000;当exponentexponentexponent为000时,皆返回111,当为111时,返回basebasebase;当exponentexponentexponent为负数时,结果等于1/(base−exponent)1/(base ^ { - exponent})1/(base−exponent)
了解一下下面的公式,求解aaa的nnn次方:
ana^nan = {an/2a ^ {n/2}an/2 * an/2a ^ {n/2}an/2, nnn为偶数
a(n−1)/2a ^ {(n-1)/2}a(n−1)/2 * a(n−1)/2a ^ {(n - 1)/2}a(n−1)/2 * aaa , nnn为奇数};
class Solution {
public:
double Power(double base, int exponent) {
//由于0的0次方在数学上是无意义的,因此输出0或1都可以
if (exponent == 0) {
return 1;
}
if (exponent == 1) {
return base;
}
double result;
//主要exponent为负数的情况
if (exponent < 0) {
result = Power(base, (-exponent)>>1);
} else {
result = Power(base, exponent>>1);
}
result *= result;
//如果幂数为奇数
if (exponent & 1 == 1)
result *= base;
return exponent > 0 ? result : (1.0/result);
}
};