所谓的快速幂,是指手动实现幂运算。
public double myPow(double x, int n) {
double res = 1.00;
for (int i = n; i != 0; i /= 2) {
if (i % 2 != 0) {
res *= x;
}
x *= x;
}
return n < 0 ? 1 / res : res;
}
解释:for 循环运行的次数为 i 减半到 1 的次数,而 x *= x 相当于对幂做加倍,加倍的次数等于减半的次数。但是由于 i / 2 在 i 为奇数的时候会造成损失,损失量刚好是上一次 x 的值,需要把这个值乘到 res 里面做弥补。同时最后一次 i / 2 必然为 1 即奇数,所以最终得到的 x 和损失量相乘得到最终结果。
知识拓展:快速乘法
public int mul(int a, int k) {
int ans = 0;
for (int i = k; i > 0; i >>= 1) {
// i为奇数时
if ((i & 1) == 1) {
ans += a;
a += a;
}
return ans;
}