zoukankan      html  css  js  c++  java
  • 数值的整数次方

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

    注意问题:
    1.判断参数:0的0次方非法,0的负数次方非法;
    2.当底数不为零,指数为正数时:循环相乘;
    3.当底数不为0,指数为负数时:先求指数的绝对值,在循环相乘,最后求倒数即可。

    详见下面代码Power函数:
    double  Power(double base,int exponent)
    {
        try
        {
            //0的负指数乘积不合法
            if(equals(base,0.0)&&exponent<0)
            {
                throw exception("参数不正确!");
            }
            unsigned int exp=(unsigned int)exponent;
            //如果指数是负数,则先转换n为正数,在计算a^n,最后求倒数
            if(exponent<0)
                exp=(unsigned int)(-exponent);
            //求base^exp,exp为正整数
            double result=GetPower(base,exp);
            //如果指数为负数则求倒数
            if(exponent<0)
                result=1/result;
            return result;
        }
        catch(exception e)
        {
            cerr<<e.what()<<endl;
        }
    }
    //a^n的实现
    double GetPower(double base,double exp)
    {
        double result=1.0;
        for(int i=0;i<exp;i++)
            result*=base;
        return result;
    }
    //判断两个double变量是否相等
    bool equals(double number1,double number2)
    {
        if(number1-number2>-0.00000001&&number1-number2<0.0000001)
            return true;
        else
            return false;
    }

    还有一种方法求a的n次方:

    利用公式:a^n=

    {

    a^(n/2)*a^(n/2)   n为偶数;

    a^[(n-1)/2] *a^[(n-1)/2]*a  n为奇数;

    }

    详见下面代码中的Power2函数:
    //递归实现
    double Power2(double base,int exponent)
    {
        try
        {
            //0的负指数乘积不合法
            if(equals(base,0.0)&&exponent<=0)
            {
                throw exception("参数不正确!");
            }
            //递归返回条件
            if(exponent==0)
                return 1;
            if(exponent==1)
                return base;
            if(exponent==-1)
                return 1/base;
            double result=Power2(base,exponent>>1);//递归计算n/2次方
            result*=result;//base的exponent次方=(base的exponent/2次方)*(base的exponent/2次方)
            if(exponent&1==1)//指数为奇数时
                result*=base;//base的exponent次方=(base的exponent/2次方)*(base的exponent/2次方)*base
            return result;
        }
        catch(exception e)
        {
            cerr<<e.what()<<endl;
        }
    }
    
    

    测试代码及结果:

    int main()
    { 
        cout<<"使用第一种方法:"<<endl;
        cout<<"2^3="<<Power(2,3)<<endl;
        cout<<"0^-3="<<Power(0,-3)<<endl;
        cout<<"2^-3="<<Power(2,-3)<<endl;
        cout<<"使用第二种方法:"<<endl;
        cout<<"-2^3="<<Power2(-2,3)<<endl;
        cout<<"-2^-3="<<Power2(-2,-3)<<endl;
        return 0;
    }

     
  • 相关阅读:
    面板评分太低会算两次
    没有使用大漩涡传送门没有杀死大法师瓦格斯
    win10创建本地用户
    延迟着色
    GPU 优化总结
    UE4 减少APK包的大小
    UE4 性能优化方法(工具篇)
    Unreal Engine 4的常见Tips
    虚幻引擎4设置Visual Studio
    模型导入的单位问题
  • 原文地址:https://www.cnblogs.com/runninglzw/p/4500472.html
Copyright © 2011-2022 走看看