Pow(x,n)

来源:互联网 发布:数据库开发工程师招聘 编辑:程序博客网 时间:2024/06/11 11:30

Implement pow(xn).

主要问题是

1) isEqual 的时候写错了,>正的,<负的

2)   递归的写法,没写对: 

if(exponent == 0)            return 1;            if(exponent == 1)            return base;
没写返回;!!!

3)  unsigned int !! 这个的范围是: 2^32-1

如果是有符号的int,这个数的范围是2^31-1  (第一位符号位,后面31个1的值为=2^31-1)

所以unsigned int的值要比signed int的值范围大一倍!

0111 = 2^3 - 1

class Solution {bool g_InvalidInput = false;public:    bool isEqual(double x, double y)    {        if((x-y<0.0000001) && (x-y>-0.0000001))        {            return true;        }        else        {            return false;        }    }public:    double powerWithUnsignedExp(double base, unsigned int exponent)    {        if(exponent == 0)            return 1;            if(exponent == 1)            return base;                        double result = powerWithUnsignedExp(base, exponent >> 1);        result *=result;                if(exponent % 2 == 1)        {            result = result * base;        }                return result;    }    public:    double pow(double x, int n) {               if((isEqual(x, 0.0) == true) && (n<0))        {            g_InvalidInput = true;            return 0.0;        }                if(n == 0)        {            return 1;        }                if(n == 1)        {            return x;        }                unsigned int unsign_n = (unsigned int) n;                                  if(n < 0)        {            unsign_n = (unsigned int)(-n);        }                double result = powerWithUnsignedExp(x, unsign_n);        if(n < 0)        {            result = 1.0/result;        }            return result;    }};


0 0
原创粉丝点击