[LeetCode] Pow(x, n)

Implement pow(xn).

 

有史以来做过最简单的一题,大概用5分钟ac,我采用fast exponential,这个在sicp的第一章就有描述。思想是:如果n是偶数的话,那么m^n = (m^(n/2))^2, 如果n是奇数,那么m^n = m*m^(n-1)。这样一来是O(logn)的。
需要特殊处理的是n是负数的情况,也很好办,如果指数是负数,那么最终结果会变成倒数。

 

 1 class Solution {
 2 public:
 3     double pow(double x, int n) {
 4         if (n == 0) return 1;
 5         else if (n == 1){
 6             return x;
 7         }
 8         else if (n == -1){
 9             return 1/x;
10         }
11         if (n % 2 == 0){
12             //even
13             double t = pow(x,n/2)
14             return t*t
15         }else {
16             return pow(x, n-1)*x;
17         }
18     }    

 

posted @ 2014-04-28 16:59  Agentgamer  阅读(133)  评论(0编辑  收藏  举报