剑指offer12:求解double类型的浮点数base和int类型的整数exponent的次方。 保证base和exponent不同时为0

Posted wxwhnu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer12:求解double类型的浮点数base和int类型的整数exponent的次方。 保证base和exponent不同时为0相关的知识,希望对你有一定的参考价值。

1. 题目描述

  给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。

2. 思路和方法

  分析: 由于指数是int 类型,所以要区分整数还是负数或者0。

2.1 直接连续累乘

  会造成多次相乘运算。

2.2 快速幂运算

  写出指数的二进制表达,例如13表达为二进制1101。 通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。 举例:10^1101 = 10^0001*10^0100*10^1000。

3.C++核心代码

3.1 累乘

技术图片
 1 class Solution 
 2 public:
 3     double Power(double base, int exponent) 
 4         int ab_e = std::abs(exponent);
 5 
 6         double res = 1.0;
 7         while(ab_e != 0) 
 8             res *= base;
 9             ab_e--;
10         
11 
12         if (exponent < 0) 
13             res = 1.0 / res;
14         
15         return res;
16     
17 ;
View Code

3.2 幂运算

技术图片
 1 class Solution 
 2 public:
 3     double Power(double base, int exponent) 
 4         int ab_e = std::abs(exponent);
 5 
 6         double res = 1.0;
 7         while(ab_e) 
 8             if (ab_e & 1) 
 9                 res *= base;
10             
11             base *= base;
12             ab_e >>= 1;
13         
14         if (exponent < 0)
15             res = 1.0 / res;
16         
17         return res;
18     
19 ;
View Code

参考资料

https://blog.csdn.net/michaelhan3/article/details/88635826

以上是关于剑指offer12:求解double类型的浮点数base和int类型的整数exponent的次方。 保证base和exponent不同时为0的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer12

剑指offer12数值的整数次方

剑指Offer-Java-数值的整数次方

剑指offer 12:数值的整数次方

剑指offer数值的整数次方

12剑指offer--数值的整数次方