题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0
题目比较简单,但是需要全面考虑问题,主要是对幂次进行分类,
1. exponent > 0
这种情况只需要进行常规操作,无需特殊处理
2. exponent = 0
当 base = 0 时,无意义,题目要求不存在此情况
当 base < 0 时,结果为1
当 base > 0 时,结果为1
3.exponent < 0
需要对exponent取相反数,计算结果取倒数
当 base = 0 时,无意义,比如 0^(-2),相当于分母为0,此时需要特殊处理
其他情况,无特殊处理
综上所述,只需要对 base = 0 且 exponent < 0 的情况进行异常处理即可。
程序源码
在计算幂次方函数PowerCore()中,利用递归方法求解
class Solution {
public:
double Power(double base, int exponent)
{
//输入无效 没有用全局变量指示
if(base==0 && exponent<0)
throw "Invalid Input";
if(exponent == 0)
return 1.0;
else if(exponent > 0)
return PowerCore(base,exponent);
else
return 1/PowerCore(base,-exponent);
}
double PowerCore(double base, unsigned int exponent)
{
//递归出口
if(exponent == 1)
return base;
int result;
result = PowerCore(base,exponent>>1);//用右移代替“/” 速度更快
result = result * result;
//取余判断奇偶数操作可以用 exponent&0x1 == 1 替代 速度更快
if(exponent%2 == 1)
result = result * base;
return result;
}
};