首页 > 代码库 > 剑指offer——实现Power()

剑指offer——实现Power()


double和float类型小数在计算机中的存储都不精确,所以如果两个数的误差很小时则认为它们相等


class PowerTest{
public:
    double Power(double base, int exp)
    {
        IsInvalied = false;
        //如果底数为0且指数小于0,则会导致1除以0,输入非法
        if (Equal(base, 0.0) && exp < 0){ IsInvalied = true; return 0;}
        else if (Equal(base, 0.0))return 0.0;

        //true表示exp为正,false表示exp为负
        bool symbol = true;
        if (exp < 0){ symbol = false; exp *= (-1); }
         double ret = PowerExp(base,exp);
        
        if (symbol == false){ ret = 1.0 / ret; }
        return ret;
    }
private:
        double PowerExp(double base,int exp)
        {
            double ret=1.0;
            while (exp>0){
                ret *= base;
                --exp;
            }
            return ret;
        }
        
        //浮点数大小的比较
    bool Equal(double num1, double num2)
    {
        if (num1 - num2 > -0.0000001&&num1 - num2 < 0.0000001)
            return true;
        else 
            return false;
    }
private:
    bool IsInvalied;//判断输入参数是否非法
};


《完》

本文出自 “零蛋蛋” 博客,谢绝转载!

剑指offer——实现Power()