红桃J

用心写好每行完美的代码,远比写一堆更有价值

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
 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)在数据较大时的效果相当好的。

posted on 2015-02-28 20:24  红桃J  阅读(269)  评论(0编辑  收藏  举报