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

Pow(x, n)

时间:2015-08-04 10:56:56      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

思路一:

x,1  x,2 x,4 x,8 x,16依次往上加,再往下减  5=1+2+2,这种方法不好

思路二:利用5=101=4+1=(2,2)+(2,0),很巧妙

  double res = 1.0;
        bool flag = false;
        unsigned int newn =n;  //这一步比较神奇,为了照顾最小的负数
        if(n<0) {newn=-n;flag=true;}
        while(newn){
        if(newn & 0x01){
           res*=x;
           }
           newn>>=1;
           x*=x;
        }
        
        if(flag) return 1/res;
        return res;

思路三:一半一半,递归的思路,我何时能有递归的思路呀。。。

 double myPow(double x, int n) {
    if (n == 0) return 1.0;
    double half = pow(x, n/2);
    if (n%2 == 0)
    {
        return half*half;
    }
    else if (n>0)
    {
        return half*half*x;
    }
    else
    {
        return half/x*half;
    }

 

Pow(x, n)

标签:

原文地址:http://www.cnblogs.com/julie-yang/p/4701136.html

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