剑指offer-12:数值的整数次方(代码的完整性)
目录
1问题描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
2答案
考察代码完整性的问题。要求有异常值的处理机制。
- 边界值处理;
- 异常值处理;
全面且高效的解法:
对于指数的求法,我们可以知道求a的n次方:
如果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;
else if(exponent == 1) return base;
else if(exponent == -1) return 1/base;
return Power(base,exponent/2) * Power(base,exponent/2) * Power(base,exponent%2);
}
};