zoukankan      html  css  js  c++  java
  • 剑指offer-面试题11.数值的整数次方

    题目:实现函数double Power(double base,int exponent),求base的

    exponent次方。不得使用库函数,同时不需要考虑大数的问题.

    这道题看似很简单:

    然而需要考虑的方面到不少:

    1.如何处理指数为负数,将负数当成正数处理 对结果求倒

    2.当指数为负数的时候并且底数为0的时候如何处理

    3.当指数为0底数为0的情况

    这里我们这样考虑,把底数为0的所有输入处理为无效输入,返回0

    代码实现如下:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 double Power(double base,int exponent)
     5 {
     6     bool zerosflag=false;
     7     if(base<0.00001&&base>-0.00001)
     8     {
     9         zerosflag=true;
    10     }
    11 
    12     if(zerosflag)
    13     {
    14         return 0.0;
    15     }
    16 
    17     if(exponent==0)
    18     {
    19         return 1.0;
    20     }
    21 
    22 
    23 
    24     bool flagminus=false;
    25     if(exponent<0)
    26     {
    27         flagminus=true;
    28         exponent=-exponent;
    29     }
    30 
    31     double answer=1.0;
    32     for(int i=0;i<exponent;i++)
    33     {
    34         answer*=base;
    35     }
    36 
    37     if(flagminus)
    38     {
    39         return 1/answer;
    40     }
    41     else
    42     {
    43         return answer;
    44     }
    45 
    46 }
    47 
    48 int main(int argc, char* argv[])
    49 {
    50     double base;
    51     int exponent;
    52     double answer;
    53     while(1)
    54     {
    55         cout<<"Please input base number: ";
    56         cin>>base;
    57         cout<<"Please input exponent number: ";
    58         cin>>exponent;
    59         answer=Power(base,exponent);
    60         
    61         if(answer==0.0)
    62         {
    63             cout<<"Invalid Input: base="<<base<<" exponent="<<exponent;
    64         }
    65         else
    66         {
    67             cout<<"The Power is: "<<answer;
    68         }
    69         cout<<endl;
    70     }
    71 
    72     return 0;
    73 }

    测试截图如下:

    当然剑指offer中还提出了一种递归的解法,大家可以自行参考。

    对了这里有个小说明:

    由于计算机在表示小数都有误差,我们不能直接用等号判断两个小数是否相等。

    如果两个小数的差的绝对值很小,就可以认为它们相等。

  • 相关阅读:
    一站式自动化测试平台 http://www.Autotestplat.com
    转载 https协议和http协议的区别
    Asp.Net底层解析
    转载 How to Encrypt connection string in web.config
    Google maps library的使用
    转载 C#中敏捷开发规范
    转载 C#中使用结构来传递多个参数
    写的非常好的文章 C#中的委托,匿名方法和Lambda表达式
    转载 C#匿名函数 委托和Lambda表达式
    转载 asp.net的Request.ServerVariables参数说明
  • 原文地址:https://www.cnblogs.com/vpoet/p/4670794.html
Copyright © 2011-2022 走看看