剑指offer---数值的整数次方(11)

来源:互联网 发布:剑灵捏脸数据人男 编辑:程序博客网 时间:2024/05/29 18:32


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

#include <iostream>using namespace std;bool g_InvalidInput = true;//判断基数是否等于0;bool equal(double num1,double num2){    if( (num1-num2)>-0.0000001 && (num1-num2) < 0.0000001)    {        return true;    }    return false;}//计算base、exponent不为0,且exponent大于0#if 0double PowerWithUnsignedExponent(double base,unsigned int exponent){    double result = 1.0;    for(unsigned int i=1;i <= exponent;i++)    {        result *= base;    }    return result;}#endif//效率比较高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 Power(double base,int exponent){    //base=0,并且指数exponent<0,要对0求倒数,会出错。    if(equal(base,0.0) && exponent < 0)    {        g_InvalidInput = false;        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;}int main(){    double tmp = Power(2,-2);    if(g_InvalidInput)    {        cout<<tmp<<endl;    }    else    {        cout<<tmp<<" "<<"输入参数有误"<<endl;    }    return 0;}
原创粉丝点击