算法主要用到了两个公式
A的2M次方等于A的M次方的平方*
A的(M+N)次方等于A的M次方A的N次方*
代码如下
//计算A的p次幂,Math.pow(A,p)
public static float RaiseToPower(float A,int p) {
//将迭代的数存在数组里
float sum = 1;
float[] a = new float[p];
a[1] = (float) Math.pow(A, 0);
for (int n= 1; n+1 <= p; n = 2*n) {
a[n] = (float) Math.pow(A, n);
}
//通过计算p除以2的余数找a数组对应的数
int[] index = new int[p];
//这个循环可以优化,不需要循环这么多次,可以logp一下
for (int i = 0; i < index.length; i++) {
index[i] = p % 2;
if(index[i]==1) {
sum*=a[(int) Math.pow(2, i)];
}
p = p/2;
}
return sum;
}
其实代码实现搞复杂了,我的是先把A的0,1,2,4…p次方存放在数组相应的元素里,不是依次存放,A的n次方这个元素存在a[n]里,所以后来寻找元素下标会有点麻烦。
贴一个链接蹭热度
(https://blog.csdn.net/u011590573/article/details/81457797)