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中还提出了一种递归的解法,大家可以自行参考。

    对了这里有个小说明:

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

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

  • 相关阅读:
    CDN网络(二)之配置和优化CDN核心缓存软件--squid
    CDN网络(一)之典型的CND架构与HTTP协议的缓存控制
    http+mysql结合keepalived做热备
    网络存储(四)之ISCSI的进阶
    Nginx系列3之Nginx+tomcat
    Nginx系列2之Nginx+php
    Nginx系列1之部分模块详解
    网络存储(三)之ISCSI搭建的入门
    网络存储(二)之ISCSI原理
    Testing
  • 原文地址:https://www.cnblogs.com/vpoet/p/4670794.html
Copyright © 2011-2022 走看看