Description
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
Solution 1:
用Divide & Conquer的思路可以每次平方,最后堆起来得到答案。
最开始的时候我搞不太清exp =0, 1这种情况怎么合并,所以就单独分了出来。
//C++
double Power(double base, int exponent) {
if(exponent == 1) return base;
if(exponent == 0) return 1;
if(exponent < 0){
exponent *= -1;
base = 1 / base;
}
double b = base;
while(exponent > 1){
base *= base;
exponent >>= 1;
}
return exponent == 1 ? base * b : base;
}
Solution 2: 快速幂
参照了网上快速幂的内容改进了一下自己的代码,感觉一下子高大上了许多,也把边缘情况逗合并起来了 :)
//C++
double Power(double base, int exponent) {
int exp = (exponent > 0 ? exponent : -1 * exponent);
double ans = 1;
while(exp){
if(exp & 1) ans *= base;
base *= base;
exp >>= 1;
}
return exponent > 0 ? ans : 1 / ans;
}