1-Description
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
2-Solution
这里注意的是需要考虑指数小于0以及底数为0的情况,所以在写代码的时候要尽量保证代码的全面性,下面是解决代码
class Solution {
public:
double Power(double base, int exponent) {
double result = 1;
if(exponent > 0){
for(int i = 1; i <= exponent; ++i){
result = result * base;
}
}
else if(exponent < 0){
for(int i = 1; i <= -exponent; ++i){
result = result * base;
}
result = 1.0 / result;
}
return result;
}
};
注意到求a的n次方可以使用如下的公式:
a
n
=
{
a
n
/
2
⋅
a
n
/
2
,
n为偶数
a
(
n
−
1
)
/
2
⋅
a
(
n
−
1
)
/
2
⋅
a
,
n为奇数
a^n = \begin{cases}a^{n/2}·a^{n/2},&\text{n为偶数} \\ \\a^{(n-1)/2}·a^{(n-1)/2}·a,&\text{n为奇数} \end{cases}
an=⎩⎪⎨⎪⎧an/2⋅an/2,a(n−1)/2⋅a(n−1)/2⋅a,n为偶数n为奇数
而这一公式显然是可以用递归来实现的,所以可以得到如下的代码:
class Solution {
public:
double Power(double base, int exponent) {
if(exponent < 0) {
base = 1/base;
exponent *= -1;
}
if(exponent == 0) return 1;
if(exponent == 1) return base;
double result = Power(base,exponent >> 1);//右移运算符代替exponent除以2
result *= result;
if(exponent & 0x01 == 1) result *= base;//位于运算符代替求余运算符(%)判断奇偶
return result;
}
};