美文网首页算法
数值的整数次方

数值的整数次方

作者: 我的天气很好啦 | 来源:发表于2018-10-08 23:32 被阅读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);       
    }
    
    

    相关文章

      网友评论

        本文标题:数值的整数次方

        本文链接:https://www.haomeiwen.com/subject/mzssaftx.html