题目:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:
1. 最直观的方法,递归求解a^b=a*a^(b-1),当然也可以用循环实现。
要注意特殊情况,指数为0时乘方结果都是1;指数为负数时的计算,可以先转化为正数再求倒数,但是底数为0时不能求导。
2.效率更高的递归方法,b为偶数,a^b=a^(b/2)*a^(b/2); b为奇数,a^b=a*a^(b/2)*a^(b/2)。
代码:
在线测试OJ:
AC代码:
方法1:
class Solution {
public:
double Power(double base, int exponent) {
bool valid=true;
if(exponent==0)
return 1;
if(exponent<0)
{
if(base==0)
{
return 0;
valid=false;
}
else
return 1.0/Power(base,-exponent);
}
if(exponent==1)
return base;
return base*Power(base,exponent-1);
}
};
方法2:
class Solution {
public:
double Power(double base, int exponent) {
bool valid=true;
if(exponent==0)
return 1;
if(exponent<0)
{
if(base==0)
{
return 0;
valid=false;
}
else
return 1.0/Power(base,-exponent);
}
if(exponent==1)
return base;
if(exponent&1==0)
return Power(base,exponent/2)*Power(base,exponent/2);
else
return base*Power(base,exponent/2)*Power(base,exponent/2);
}
};