35.数值的整数次方

简介: 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方

题目描述


给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方


思路:


1)判断输入的数是否正确


底=0且指数小于0


2)判断指数是否为负


3)由指数的大小确定累乘的次数

问题是效率不高,时间复杂度O(n)


解法1:


逐个乘


class Solution {

     bool invalidInput=false; //返回错误方式  

     public:

    double Power(double base, int exponent)

    {    

       if(equal(base,0.0)&&exponent<0)//如果指数小于0且底数为0时

       {

           invalidInput=true;

           return 0.0;

       }

       int absexponent=exponent;

       if(exponent<0)

           absexponent=-exponent;

       double res=getPower(base,absexponent);//调用子函数

       if(exponent<0)

           res=1.0/res;

       return res;

 }

   public:

    bool equal(double num1,double num2)//判断一个浮点数是否为0

   {

       if(num1-num2>-0.000001&&num1-num2<0.000001)

           return true;

       else

           return false;

   }

  public:

      double getPower(double b,int e)

      {

       double result=1;

      for(int i=1;i<=e;i++)

      {

          result*=b;

      }

       return result;

   }

};

解法2:


使用公式

952807ee50dbb680f2a710cf96c63b6d_20190210183857686.png


时间复杂度O(logn)


class Solution {

     bool invalidInput=false; //返回错误方式  

     public:

    double Power(double base, int exponent)

    {    

       if(equal(base,0.0)&&exponent<0)//如果指数小于0且底数为0时

       {

           invalidInput=true;

           return 0.0;

       }

       int absexponent=exponent;

       if(exponent<0)

           absexponent=-exponent;

       double res=getPower(base,absexponent);//调用子函数

       if(exponent<0)

           res=1.0/res;

       return res;

 }

   public:

    bool equal(double num1,double num2)//判断一个浮点数是否为0

   {

       if(num1-num2>-0.000001&&num1-num2<0.000001)

           return true;

       else

           return false;

   }

  public:

      double getPower(double b,int e)

      {

       if(e==0)

           return 1.0;

       if(e==1)//递归结束条件

           return b;

       double result=getPower(b,e>>1);//每次右移

       result*=result;

       if((e&1)==1)//关键,区分指数是偶数或者是奇数的关键 在栈中参数调用时返回

           result*=b;

       return result;

   }

};

调用过程举例:  

b0c5c9d417e0c10e3f9fdaa32554946c_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hlZGEz,size_16,color_FFFFFF,t_70.png

目录
相关文章
|
5月前
两个整数相加
【10月更文挑战第12天】两个整数相加
47 5
|
5月前
取一个整数a从右端开始的 4~7 位
取一个整数a从右端开始的 4~7 位。
30 7
|
10月前
63.取一个整数a从右端开始的4~7位。
63.取一个整数a从右端开始的4~7位。
53 0
|
6月前
比较三个整数大小
比较三个整数大小
88 13
|
6月前
|
存储 编译器 C语言
取一个整数a从右端开始的4~7位。
取一个整数a从右端开始的4~7位。
62 1
|
9月前
取一个整数 a 从右端开始的 4~7 位
【6月更文挑战第23天】取一个整数 a 从右端开始的 4~7 位。
61 9
|
10月前
求两个整数之和
两幅图片展示,无文字描述。第一张图片链接:`https://ucc.alicdn.com/pic/developer-ecology/jsj5v54nhc5lk_9a19903e665642b388dedfa69ba6dd98.jpg`,第二张图片链接:`https://ucc.alicdn.com/pic/developer-ecology/jsj5v54nhc5lk_9698cabf5d2f4ce38f6ea21a4ee8430e.jpg`。
54 0
wustojc1006求2个整数的和
wustojc1006求2个整数的和
68 0
剑指offer 15. 数值的整数次方
剑指offer 15. 数值的整数次方
98 0