首页 > 其他 > 详细

Leetcode OJ: Pow(x, n)

时间:2014-04-06 09:34:05      阅读:310      评论:0      收藏:0      [点我收藏+]

实现Pow(x, n)

累乘当然可以,但效率太低了。网上搜的很多用的都是分治的思想,递归实现,感觉有点复杂。

分析下吧

n = n1 * 2^0 + n2 * 2^1 + n3 * 2^2 + ...

x^n = x^(n1 * 2^0 + n2 * 2^1 + n3 * 2^2 + ...) = (x^(2^0))^n0 * (x^(2^1))^n1 * ...

也许这么看着很复杂,其实就是把n分解成二进制数就很清晰了,为1的位才相乘,为0的跳过,另外还要处理次幂为负的情况,看了代码就清晰~

bubuko.com,布布扣
 1 class Solution {
 2 public:
 3     double pow(double x, int n) {
 4         double ret = 1;
 5         if (n < 0) {
 6             x = 1/x;
 7             n = -n;
 8         }
 9         while (n > 0) {
10             if (n & 1)
11                 ret *= x;
12             x = x * x;
13             n >>= 1;
14         }
15         return ret;
16     }
17 };
bubuko.com,布布扣

 

 

 

Leetcode OJ: Pow(x, n),布布扣,bubuko.com

Leetcode OJ: Pow(x, n)

原文:http://www.cnblogs.com/flowerkzj/p/3647776.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!