题目链接
思路:
首先判断指数是否小于0,若小于0,则最终结果为倒数。
求 m 的 n 次幂,若 n 为偶数,则 m^n = m ^ ( n / 2) * m ^ ( n / 2)= (m ^ 2) ^ (n / 2)
若 n 为奇数,则 m^n = m ^ ( (n - 1) / 2 ) * m ^ ( (n - 1) / 2 )* m = (m ^ 2) ^ ( (n - 1) / 2) * m
利用上面的性质,可写出如下代码:
public double myPow(double x, int n) {
if (n == 0) {
return 1;
}
boolean less0 = n > 0 ? false : true;
double result = 1.0;
for (int i = n; i != 0; i /= 2) {
if (i % 2 != 0) { // 若当前 i 次幂为奇数
result *= x; // 单独乘以x
}
x *= x; // 每次都计算 x^2
}
return less0 ? (1 / result) : result;
}