JZ16 数值的整数次方
JZ16 数值的整数次方
描述
实现函数 double Power(double base, int exponent),求base的exponent次方。
注意:
1.保证base和exponent不同时为0。
2.不得使用库函数,同时不需要考虑大数问题
3.有特殊判题,不用考虑小数点后面0的位数。
数据范围: $∣base∣≤100 $ , $∣exponent∣≤100 $ ,保证最终结果一定满足 $∣val∣≤104 $
进阶:空间复杂度 $O(1)$ ,时间复杂度 $O(n)$
示例1
1 | 输入:2.00000,3 |
示例2
1 | 输入:2.10000,3 |
示例3
1 | 输入:2.00000,-2 |
题解
一开始我考虑的是完全使用位运算,把问题想复杂了。看了一下讨论,学习到了一个叫快速幂的思想。
快速幂:求$A^n$,可以求$A^2$,借由此继续求$A^4$直到$A^n(n为偶数),或A^{n-1}(n为奇数)$。
具体到本题的实现就是首先判断负数次方(取倒数),然后用位运算做快速幂即可。
代码
1 | # |