首页 > 剑指offer:面试题16. 数值的整数次方

剑指offer:面试题16. 数值的整数次方

题目:数值的整数次方

实现函数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;}
};

 

更多相关: