數值的整數次方

??環境:牛客的編譯環境
??語言:JavaScript
??難點:沒有考慮到底數為0,指數為負數和正數的不同情況。
??題目:給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。
??解題思路:我自己的方法比較簡單,直接利用循環去處理的。
??代碼:

function Power(base, exponent)
{
    // write code here
    if(base == 0)
        return 0;
    var result = 1;
    if(exponent == 0)
        return 1;
    else if(exponent > 0){
        for(let i = 0; i < exponent; i++){
            result *= base;
        }
    }
    else if(exponent < 0){
        for(let i = exponent; i < 0; i++){
                result *= (1 / base);
            }
    }
    return result;
}

后來看了討論里面,其他朋友用位移運算做的處理,感覺很棒,最近做題經常會用到位移思想,我覺得這個想法很別致。而且這里面也找了數學規律,我自己用筆演算了一遍,規律暫且想的不是很明白,我還得再想想。

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);       
}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容