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

leetcode第一刷_Pow(x, n)

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

标签:c++   leetcode   算法   

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

思想是每次对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)

标签:c++   leetcode   算法   

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

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