码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode. Pow(x, n)

时间:2014-11-14 19:30:22      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   sp   div   log   bs   amp   

Implement pow(xn).

直接把x自乘n-1次很容易实现,时间复杂度O(n).

实际上,x^n = x^(n/2) * x^(n/2), 这样只需要求一次 x^(n/2),再做一次乘操作即可,T(n) = T(n/2) + c, T(n) = lbn. (参见 CLRS 主定理)

同时要注意两个细节:

1、n可能为负数,需要取倒数,即 x^n = 1/(x^(-n)).

2、最小负数0x80000000直接转正数会溢出。

 1     double powpositive(double x, int n)
 2     {
 3         double ret = 0;
 4         if (n == 0)
 5             return 1;
 6             
 7         ret = powpositive(x, n >> 1);
 8         if (n & 1)
 9             return ret * ret * x;
10         else
11             return ret * ret;
12     }
13     
14     double pow(double x, int n)
15     {
16         if (n >= 0)
17         {
18             return powpositive(x, n);
19         }
20         else
21         {
22             if (n == 0x80000000)
23                 return 1 / (powpositive(x, 0x7fffffff) * x);
24             else
25                 return 1 / (powpositive(x, -n));
26             
27         }
28     }

 

leetcode. Pow(x, n)

标签:style   blog   color   os   sp   div   log   bs   amp   

原文地址:http://www.cnblogs.com/ym65536/p/4097760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!