Pow(x, n)

思路一:

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;
    }

 

posted @ 2015-08-04 09:48  *桔子*  阅读(157)  评论(0编辑  收藏  举报