程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> leetcoder-50-Pow(x, n)

leetcoder-50-Pow(x, n)

編輯:C++入門知識

leetcoder-50-Pow(x, n)


 

Pow(x, n)

可以直接用庫函數pow(x,n)一步搞定,但明顯這樣就沒意思了。
參考 快 速 冪 取 模

二分,復雜度為O(logn)
遞歸方法

 

class Solution {
public:
    double myPow(double x, int n) {
        if(n<0) return 1.0/myPow_1(x,-n);
        else return myPow_1(x,n);
    }
    double myPow_1(double x,int n)
    {
        if(n==0) return 1.0;
        double y=myPow_1(x,n/2); // 不能用n>>1 T_T   不知道什麼原因
        if(n&1) return y*y*x;
        else return y*y;
    }
};

 

 

位運算

 

class Solution {
public:
    double myPow(double x, int n) {
        if(n<0){
            n=-n;
            x=1.0/x;
        }
        
        double ans=1;
        while(n){
            if(n&1) ans=ans*x;
            x=x*x;
            n=n/2;
        }
        return ans;
    }
};


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved