题目16:数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
思路
要注意计算机关于double相等的判定
判断两个double型数据,计算机有误差
1 | private static boolean equal(double num1,double num2){ |
一. 常规方法
$O(N)$
代码实现
1 | public class _16 { |
输出:
1 | 0.0625 |
二. 对核心方法优化
$O(logN)$
下面的讨论中 x 代表 base,n 代表 exponent。
因为 (x*x)n/2 可以通过递归求解,并且每递归一次,n 都减小一半,因此整个算法的时间复杂度为 O(logn)。
代码实现
1 | private static double powerWithUnsignedExponent(double base, int exponent) { |
输出:
1 | 0.0625 |