数值得整数次方--模拟pow函数的功能

1.数值得整数次方

(1)当底数等于0且指数为负数时,错误;
(2)当底数任意,指数分为大于等于0,和小于0
1)指数>=0 ,直接求值;
2)指数<0,先给指数取绝对值,然后按照指数为正求值,最后给结果求倒数

代码:

#include<iostream>
using namespace std;
double fun(double bash,unsigned int tmp);
bool Zero(double bash,double num);
double Power(double bash,int exponent)
{
    if (Zero(bash,0.0)&&(exponent<0))//当底数等于0且指数为负数时,错误;
    {
        printf("erro\n");
        exit(EXIT_FAILURE);
    }
    unsigned int tmp=(unsigned int)exponent;//tmp用于保存变为正数的次数
    if (exponent<0)
    {
        tmp=(unsigned int)(-exponent);
    }
    double ret=fun(bash,tmp);//无论次数正负,统一用正次数求结果
    if (exponent<0)//当次数时小于0的情况,返回结果的倒数
    {
        ret=1.0/ret;
    }
    return ret;//当次数时大于或者等于0的情况,直接返回结果
}
double fun(double bash,unsigned int tmp)//求次幂的值
{
     double ret=1;
     for (unsigned i=1;i<=tmp;i++)
     {
         ret*=bash;
     }
     return ret;
}
bool Zero(double bash,double num)//判断底数是否等于0
{
   if ((bash-num>-0.0000001)&&(bash-num<0.0000001))
   {
       return true;
   }
   return false;
}

int main()
{  
    //当底数>=0
    cout<<Power(2.0,3)<<endl;
    cout<<Power(2.0,-3)<<endl;
    cout<<Power(0.0,3)<<endl;
    //当底数<0
    cout<<Power(-2.0,3)<<endl;
    cout<<Power(-2.0,-3)<<endl;
    //当底数<0&&次数<0
    cout<<Power(0,-3)<<endl;
    return 0;
}

运行结果:
这里写图片描述

2.求一个底数次幂值得优化

优化:上面的 求次幂的值需要循环次数 次,才可以求出该数的次方的值;
其实可以2倍的求:
a^n=a^(n/2)*a^(n/2)—n为偶数
a^n=a^(n/2)*a^(n/2)*a—-n为基数

double fun(double bash,unsigned int tmp)//求次幂的值
{
    //特殊情况处理
    if (tmp==0)
    {
        return 1;
    }
    if (tmp==1)
    {
        return bash;
    }

    //常规公式
    double ret=fun(bash,tmp/2);//求a^(n/2)
    ret*=ret;//次数为偶数,a^n=a^(n/2)*a^(n/2)
    if (tmp%2!=0)//次数为奇数,在偶数的处理上在乘一次底数
    {
        ret=ret*bash;//a^n=a^(n/2)*a^(n/2)*a
    }
   return ret;//返回结果;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值