首页 > 其他 > 详细

数值的整数次方

时间:2020-09-01 22:30:13      阅读:59      评论:0      收藏:0      [点我收藏+]

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
 
保证base和exponent不同时为0

 

    /**
     * 1.全面考察指数的正负、底数是否为零等情况。
     * 2.写出指数的二进制表达,例如13表达为二进制1101。
     * 3.举例:10^1101 = 10^0001*10^0100*10^1000。
     * 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
     */
    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.cnblogs.com/fangzheng-nie/p/13598829.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!