题目要求:
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
解题思路:
这一题需要我们实现base的exponent次幂的计算,首先需要考虑边界值,传入的base 是否为0,若为0,则需要考虑0没有0次方和负指数幂。然后再考虑一个简单的循环方法,将base累乘exponent次即可,当为负指数幂时,将最后的结果求倒即可。
高级的解题思路
使用循环需要累乘exponent次,所以考虑快速幂。
例如 x的y次方可以分解成:
(x的y/2次方)(x的y/2次方) 当y为偶数
(x的y/2次方)(x的y/2次方)*x 当y为奇数
再考虑当y小于0时,要求导。(在这个方法里可以让当y==-1的时候,直接返回1/x即可。)
class Solution {
public double myPow(double x, int n){
if(x==0) {return 0;}
if(n==0) {return 1;}
if(n==1) {return x;}
if(n==-1) {return 1/x;}
double result=myPow(x,n>>1);//例如2的2次方相当于2的一次方*2的一次方
if(n%2==0){
result=result*result;
}
else{
if(n<0){x=(1/x);}
result=result*result*x;
}
return result;
}
}