剑指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 ;
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 ;
参考资料
https://blog.csdn.net/michaelhan3/article/details/88635826
以上是关于剑指offer12:求解double类型的浮点数base和int类型的整数exponent的次方。 保证base和exponent不同时为0的主要内容,如果未能解决你的问题,请参考以下文章