python中幂运算运算符,函数幂的运算

  python中幂运算运算符,函数幂的运算

  【标题】实现函数doublepower (doublebase,int exponent),求底数的指数幂,不考虑溢出。

  [路斯]这个问题的核心太简单了。一个周期就能搞定,我就不多说了。关键是要考虑代码的健壮性:(1)首先,base=0,exponent=0在数学上是没有意义的;当基数=0且指数为0时,分母为零。我们应该把它当作一个特例。(2)如果指数为负,那么首先要求对应正数的幂,然后取倒数。

  这样,我们可以得到下面的代码:

  1 #包括

  2 #包括

  3使用命名空间std

  四

  5 bool InvalidInput=false

  6 double PowerWithExponentUnsigned(双基数,无符号整数指数无符号);

  七

  8/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

  11双幂(双基数,整数指数)

  12 {

  13 InvalidInput=false

  14

  15 //底数等于0,指数小于等于0,无效输入16 if(底数==0.0指数=0)

  17 {

  18 InvalidInput=true

  19返回0.0;

  20 }

  21

  2//将所有指数转换为正数计算23 unsigned int指数unsigned=static _ cast(指数);

  24 if(指数0)

  25 {

  26指数无符号=static _ cast(-指数);

  27 }

  28

  29 //计算正指数时的结果是30 double result=powerwithexponent unsigned(base,指数unsigned);

  31

  2//如果指数为负,求33的倒数If(指数为0)

  34结果=1.0/结果;

  35

  36返回结果;

  37 }

  38

  39

  40/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

  43 double PowerWithExponentUnsigned(双基数,无符号整数指数无符号)

  44 {

  45双结果=1.0;

  46 for(无符号int I=1;i=指数无符号;我)

  47 {

  48结果*=基数;

  49 }

  50返回结果;

  51 }

  五十二个

  53

  54 int main()

  55 {

  56 cout 请输入您的基数和指数:

  57双低音=0.0;

  58 int expont=0;

  59 cinbasexpont

  60

  61 cout 结果是:

  62 cout

  63

  64返回0;

  65 }

  运行结果如下:

  以上算法考虑情况比较全面,但还有一点需要改进。我们的子函数需要指数乘法。事实上,对于幂的算法,我们有以下公式:

  从上面的公式可以看出,它只需要logn次乘法,这是一个简单的递归公式,所以我们可以对子函数进行如下改进:

  /************************************************************************

  *如果指数为正,则计算底数的指数无符号幂。

  ************************************************************************/

  double PowerWithExponentUnsigned(双基数,无符号整数指数无符号)

  {

  //最小的子问题if(指数无符号==0)

  返回1;

  double result=PowerWithExponentUnsigned(base,指数无符号/2);

  结果=结果*结果;

  if(指数无符号% 2==1)

  {

  结果*=基数;

  }

  返回结果;

  }

  你只需要第一次替换源代码中的子函数就可以测试了。笔者的测试结果如下:

  参考资料:

  注意:

  1)本博客所有代码环境编译都是win7 VC6。所有代码都经过博主调试。

  2)博主python27享有这篇博文的版权。网上转载请注明出处来自http://www.cnblogs.com/python27/.如果你有什么解决问题的建议,请在评论里告诉我。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: