Pow(x, n):from LeetCode

题目大意:计算x的n次方


题目的一个解法可以用二分的思想比较普遍

题目的第二个解法可以借鉴网络传输窗口的传输阈值变化方法


第一个方法的代码如下:

class Solution {
public:
    
    double pow(double x, int n) {
        if(n<0)
        {
            n=-n;
            x=1/x;
        }
        if(n==0)
        return 1;
       if(n==1)
            return x;
        double tmp;
        if(n%2==1)
        {
            tmp=pow(x,(n-1)/2);
            return tmp*tmp*x;
        }
        tmp=pow(x,n/2);
        tmp*tmp;
    }
};

第二个方法的解法如下:

class Solution {
public:
    double pow(double x, int n) {
        if(n==0)return 1.0000;
        if(n<0)
        {
            n=-n;
            x=1.00/x;
        }
        double tmp=1.00000;
        double mult=x;
        int dec=1;
        while(n)
        {
            tmp*=mult;
            n-=dec;
            if(n>=2*dec)
            {
                dec*=2;
                mult*=mult;
            }else
            {
                dec=1;
                mult=x;
            }
            if((tmp<0.00000001 && tmp>-0.00000001) || tmp==1.000000)
                return tmp;
        }
        return tmp;
    }
};

//刚刚传错了


同时提交情况下,第二种方法时间更优。另外也是一种非迭代方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值