算法

数值的整数次方

2018-10-08  本文已影响0人  我的天气很好啦

🍞环境:牛客的编译环境
🍰语言: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);       
}

上一篇下一篇

猜你喜欢

热点阅读