zoukankan      html  css  js  c++  java
  • leetcode Pow(x,n) 快速幂

     1 class Solution {
     2 public:
     3     double pow(double x, int n) {
     4         if(x == 1)
     5         {
     6             return 1;
     7         }
     8         if(x ==-1)
     9         {
    10             if(n%2==0)
    11             return 1;
    12             else
    13             return -1;
    14         }
    15         if (n < 0)
    16     {
    17         return 1 / pow(x, -n);
    18     }
    19         if (n == 0)
    20         {
    21         return 1;
    22     }
    23     if (n == 1)
    24         return x;
    25     else
    26     {
    27         if (n % 2 == 1)
    28         {
    29             double t = pow(x, n / 2);
    30             return t * t * x;
    31         }
    32         else
    33         {
    34             double t = pow(x, n / 2);
    35             return t*t;
    36         }
    37     }
    38     }
    39 };

     这个东西叫做“快速幂”,相应的有矩阵快速幂,复数快速幂等,只要是运算或逻辑关系,满足结合律就能使用这个方法,O(lgn)在数据较大时的效果相当好的。

  • 相关阅读:
    tarjan algorithm
    最小生成树
    Manacher's Algorithm (马拉车算法)
    KMP
    Trie(字典树)
    Hash
    GDB调试
    图论
    扫描线
    STL
  • 原文地址:https://www.cnblogs.com/chaiwentao/p/4306171.html
Copyright © 2011-2022 走看看