剑指offer_数值的整数次方

来源:互联网 发布:ubuntu 安装 ssh 编辑:程序博客网 时间:2024/05/17 07:08

实现函数double Power(double base , int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

bool g_InvalidInput = false;bool equal(double num1,double num2){    if((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001))//浮点型判断相等    {        return true;    }    return false;}/*本段 : 乘积利用位运算替代除法,并且利用幂次方的性质double PowerWithUnsignedExponent(double base, unsigned int exponent){    if(exponent == 0)        return 1;    if(exponent == 1)        return base;    double result = PowerWithUnsignedExponent(base,exponent >> 1);    result *= result;    if(exponent&0x1 == 1)//如果是奇数要乘以底数本身        result *= base;    return result;}*/double PowerWithUnsignedExponent(double base, unsigned int exponent){    double result = 1.0;    for(int i=1;i<=exponent;++i)    {        result *= base;    }    return result;}double Power(double  base, int exponent){    g_InvalidInput = false;    if(equal(base,0.0) && exponent<0)//出现0的负指数幂,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;}

这里写图片描述