Pow(x, n):from LeetCode

来源:互联网 发布:上海交通大学 网络教育 编辑:程序博客网 时间:2024/05/22 08:18

题目大意:计算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;    }};

//刚刚传错了


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

0 0
原创粉丝点击