题目:数值的整数次方
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
解题:
如果我们求一个数字的32次方。除了用32个这个数字相乘。
我们还可以,求2数字的平方。在平方的基础上,求4次方。4次方的基础上,求8次方。8次方的基础上,求16次方。16次方的基础上,求32次方。
那么我们一定会用到下面的公式
//运行时间:3ms
//占用内存:480K
class Solution {
public:
bool g_InvalidInput = false;//设置输入变量标志位,True代表出现0的非正整数次方计算
double Power(double base, int exponent) {
g_InvalidInput = false;
if((base==0.0)&&exponent<=0)//计算0的非正整数次方,标志为为true,返回0.0
{
g_InvalidInput = true;
return 0.0;
}
double result = myPow(base,exponent);//获取base的真整数次方
if(exponent<0) result = 1/result;//如果指数是负数 求结果的导数
return result;
}
//计算base的正整数次方
double myPow(double base, int exponent)
{
if(exponent==0)
return 1;
if(exponent==1)
return base;
double result =myPow(base,exponent/2);
//可替换代码1:double result =PowerCompute(base,exponent>>1);用右移运算符代替除以2//可能会显示超出内存
result *=result;
if(exponent%2)
//可替换代码2:if(exponent &0x1 ==1) 用位与运算符代替求余运算符号
result *= base;
return result;
}
};