首页 > 其他 > 详细

leetcode第一刷_Pow(x, n)

时间:2014-05-15 03:29:12      阅读:344      评论:0      收藏:0      [点我收藏+]

快速乘方的算法,写了好多变,出了各种错,真是服了我自己了。

思想是每次对n减半,将当前的temp平方。需要注意的是如果当前的n是个奇数,减半之后会丢失掉一次乘积,因此如果当前的n为奇数,应该先在结果里面乘一个temp。

还有,n可能是负数,负数的次方最后要求一次倒数。

class Solution {
public:
    double pow(double x, int n) {
        if(n == 0)
            return 1;
        if(n == 1)
            return x;
        double res = 1, temp = x;
        bool neg = false;
        if(n<0){
            neg = true;
            n = -n;
        }
        while(n>0){
        	if(n&1)
        		res *= temp;
            temp *= temp;
            n /= 2;
        }
        if(neg)
            return (double)1.0/res;
        return res;
    }
};


leetcode第一刷_Pow(x, n),布布扣,bubuko.com

leetcode第一刷_Pow(x, n)

原文:http://blog.csdn.net/u012792219/article/details/25702707

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