簡單快速冪

題目描述

給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。

普通算法:時間複雜度O(n)

public class Solution {
    public double Power(double base, int exponent) {
        double res = 1;
        int n;
        if(exponent>0){
            n = exponent;
        }else if(exponent<0){
            n = -exponent;
        }else{// n==0
            return 1;// 0的0次方
        }
        for(int i=1;i<=n;i++){
            res=res*base;
        }
        return exponent>=0?res:(1/res);
    }
}

快速冪:時間複雜度O(log(n))

    public double Power(double base, int n) {
        double res = 1,curr = base;
        int exponent;
        if(n>0){
            exponent = n;
        }else if(n<0){
            if(base==0)
                throw new RuntimeException("分母不能爲0"); 
            exponent = -n;
        }else{// n==0
            return 1;// 0的0次方
        }
        while(exponent!=0){
            if((exponent&1)==1)
                res*=curr;
            curr*=curr;// 翻倍
            exponent>>=1;// 右移一位
        }
        return n>=0?res:(1/res);       
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章