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

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

     1 bool g_InvalidInput = false;
     2 
     3 double Power(double base,int exponent)
     4 {
     5  g_InvalidInput = false;
     6  if(equl(base,0,0)&&exponent<0)
     7  {
     8  g_InvalidInput = true;
     9  return 0.0;
    10  }
    11 unsigned int absExponent =(unsigned int)(exponent);
    12 if(exponent<0)
    13 absExponent = (unsigned int)(-exponent);
    14 double result = PowerWithUnsignedExponent(base,absExponent);
    15 if(exponent<0)
    16 result = 1.0/result;
    17 return result;
    18 }
    19 
    20 double PowerWithUnsignedExponent(double base,unsigned int exponent)
    21 {
    22  double result = 1.0;
    23 for(int i=1;i<=exponent;++i)
    24  result *= base;
    25  return result;
    26 }
    27 
    28 bool equal(double num1,double num2)
    29 {
    30  if((num1-num2>-0.0000001)&&
    31  (num1-num2<0.0000001))
    32 return true;
    33 else
    34 return false;
    35 }
    36 
    37 更加高效的方法:
    38 double PowerWithUnsignedExponent(double base,unsigned int exponent)
    39 {
    40  if(exponent==0)
    41  return 1;
    42  if(exponent==1)
    43  return base;
    44  double result=PowerWithUnsignedExponent(base,exponent>>1);
    45  result *=result;
    46  if(exponent&0x1==1)
    47  result *=base;
    48  return result;
    49 }

    这里的话,假设我们输入的指数exponent为32,我们的目标是求一个数的32次方,如果我们已经知道了它的16次方,那么只需要在16次方的基础上在平方一次就好了。而16次方是8的平方,这样以此类推,我们求32次方只需要做5次乘法:先求平方,在平方的基础上求4次方,在4次方的基础上求8次方,在8次方的基础上求16次方,最后在16次方的基础上求32次方。

  • 相关阅读:
    SonarQube+Jenkins代码审查集成CI/CD
    “拒绝了对对象'aspnet_CheckSchemaVersion'的 EXECUTE 权限”之解决
    ORA-31687: error creating worker process with worker id 1
    Oracle修改表列长度
    RouYi(Export excel)
    Spring事务失效的原因
    Linux/Keychron键盘 功能键F1-F12映射修复
    git 推送本地文件到远程仓库
    git remote 删除已添加的远程仓库地址
    mssql新建数据库
  • 原文地址:https://www.cnblogs.com/wxdjss/p/5448515.html
Copyright © 2011-2022 走看看