给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

首先,这道题不是要你用语言中内置的pow函数。。。

可以用乘法实现幂次,这个比较简单,就不贴代码了。为O(n)时间复杂度

有一种叫做快速幂算法的方法,可以快速实现。为O(lgn)时间复杂度

具体原理暂时不懂,有机会写一下补充上来。可以参考这篇文档:https://wenku.baidu.com/view/2384ecc02cc58bd63186bdf6.html

代码如下:

pow(a,b)

如果b为0,结果为1

如果b为负数,pow(a,b) = 1.0 / pow(a,-b)

public class Solution {
    public double Power(double base, int exponent) {
        
        //指数为0
        if(exponent==0){
            return 1;
        }
        
        //指数的预处理(负指数变正)
        int exponent_copy = exponent;//拷贝exponent
        if(exponent<0){
            exponent_copy = -exponent_copy;
        }

        //快速求幂
        double ret = 1;
        while(exponent_copy>0){
            if(exponent_copy%2==1){//奇数
                ret *= base;
            }
            exponent_copy /= 2;
            base *= base;
        }
        

        if(exponent>0){ //指数为正
            return ret;
        }
        else{//指数为负
            return 1.0/ret;
        }
  }
}

 

声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。