【刷算法】數值的整數次方

問題形貌

給定一個double範例的浮點數a和int範例的整數m。求a的m次方。

剖析

能夠採用暴力的解決辦法,把a乘以m次就能夠獲得效果,但我們一定不是想要如許的要領。

視察相乘的歷程,比方a^7,實在能夠寫成a^1*a^2*a^4,而且a^4=a^2*a^2,
a^2=a*a,我們能夠應用高次方的冪能夠由低次方的冪相乘得來。

代碼完成

function Power(a, m)
{
    var isNegative = false;
    if(m === 0)
        return 1;
    else if(m < 0){
        if(a === 0)
            throw new Error();
        else{
            isNegative = true;
            m = -m;
        }
    }
    
    var res = 1, cur = a;
    while(m !== 0) {
        if(m & 1 === 1){
            res = res * cur;
        }
        cur = cur * cur;
        m = m >>> 1;
    }
    
    return isNegative ? 1/res : res;
}
    原文作者:亞古
    原文地址: https://segmentfault.com/a/1190000015432803
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞