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

目录
相关文章
|
30天前
两个整数相加
【10月更文挑战第12天】两个整数相加
19 5
|
2月前
|
存储 编译器 C语言
取一个整数a从右端开始的4~7位。
取一个整数a从右端开始的4~7位。
27 1
|
5月前
取一个整数 a 从右端开始的 4~7 位
【6月更文挑战第23天】取一个整数 a 从右端开始的 4~7 位。
42 9
|
6月前
|
算法 Python
计算32位二进制整数中1的个数(包括负数补码)
计算32位二进制整数中1的个数(包括负数补码)
120 0
【剑指offer】-数值的整数次方-12/67
【剑指offer】-数值的整数次方-12/67
wustojc1006求2个整数的和
wustojc1006求2个整数的和
39 0
剑指offer 15. 数值的整数次方
剑指offer 15. 数值的整数次方
52 0
求整数的位数及各位数字之和
求整数的位数及各位数字之和
99 0
|
前端开发 JavaScript 程序员
数值的整数次方
数值的整数次方
数值的整数次方
|
存储 Java
从0.2+0.4不等于0.6说浮点数
从0.2+0.4不等于0.6说浮点数,浮点数我一直心存疑惑。
150 0
从0.2+0.4不等于0.6说浮点数