zoukankan      html  css  js  c++  java
  • 数值的整数次方(类快速幂)


    代码:

    
    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;
        }
    }
    

    不一样的烟火
  • 相关阅读:
    git命令
    熟悉sql常用语句
    面试:django
    python面试基本题(你需要的)
    django的几种方法进行序列化(视图)
    阿布云代理ip
    了解Git操作
    django前后端交互
    面向对象
    mysql数据库基本操作
  • 原文地址:https://www.cnblogs.com/cstdio1/p/13266353.html
Copyright © 2011-2022 走看看