【剑指offer】面试题11:数值的整数次方

来源:互联网 发布:java任务书 编辑:程序博客网 时间:2024/06/15 06:18

首先,我们分析下可能出现的情况:指数可能为负值,我们先求指数的绝对值次方,然后求导。->求导,那就要考虑分母不为0的情况了。

bool g_InvalidInput = false;double Power(double base, int exponent){    g_InvalidInput = false;    if (equal(base, 0.0) && exponent < 0)    {        g_InvalidInput = true;        return 0.0;    }    unsigned int absExponent = (unsigned int)(exponent);    if (exponent < 0)    {        absExponent = (unsigned int)(-exponent);    }    double result = PowerWithUnsignedExponent(base, absExponent);    if (exponent < 0)    {        result = 1.0 / result;    }    return result;}double PowerWithUnsignedExponent(double base, unsigned absExponent){    double result = 1.0;    for (int i = 0; i < absExponent; ++i)    {        result *= base;    }    return result;}bool equal(double num1, double num2){    if ((num1-num2<0.000001) && (num1-num2>-0.000001))    {        return true;    }    return false;}

第二种方法:
a^n
当n为偶数时,a^n=a^(n/2);
当n为奇数时,a^n=a^((n-1)/2)*a^((n-1)/2)*a;

double PowerWithUnsignedExponent(double base, unsigned absExponent){    if (absExponent == 0)    {        return 1;    }    if (absExponent == 1)    {        return base;    }    double result = PowerWithUnsignedExponent(base, absExponent >> 1);    result *= result;    if (absExponent & 0x1)    {        result *= base;    }    return result;}
0 0
原创粉丝点击