首页 > 其他 > 详细

数值的整数次方(类快速幂)

时间:2020-07-08 13:18:55      阅读:63      评论:0      收藏:0      [点我收藏+]

技术分享图片
技术分享图片

代码:


class Solution {
    public double myPow(double x, int n) {
     int len = Math.abs(n);  
     if(len==0) return 1;
     if(len==1){
         if(n>0) return x;
         return 1/x;
     } 
     if(len==2){
         if(n>0) return x*x;
         return 1/(x*x);
     }
     //因为n<0是1/x^n算出来的,但是n绝对值最大是2^31 ? 1,负数存在2^31所以进行单独判断,否则会溢出 
     if(n==-2147483648){
         if(x==1||x==-1) return 1;
         else return 0;
     }

     //开辟动态数组存储1-100次方的值  
     double dp[] = new double[101];
     dp[0]=1;
     dp[1]=x;
     for(int i=2;i<101;i++){
         if(i%2==0){
             dp[i]=dp[i/2]*dp[i/2];
         }else{
             dp[i]=dp[i/2]*dp[i/2]*dp[1];
         }
     }
     double res=1;
    while(len>0){
     for(int i=100;i>=0;i--){
         if(len-i>=0){
             res*=dp[i];
             len-=i;
             break;//这里一定要加break,可以尽可能选最大次幂进行相乘
         }
     }
    }
     return n>=0? res:1/res;
    }
}

技术分享图片

数值的整数次方(类快速幂)

原文:https://www.cnblogs.com/cstdio1/p/13266353.html

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