暴力破解的形式很容易想到但是另一种方法不太容易想到 代码如下
代码如下
/**
* 设计一个高效的求a的n次幂的算法
*/
public class _02_7设计一个高效的求a的n次幂的算法 {
public static void main(String[] args) {
int n = 15;
int a = 2;
System.out.println(pow0(a,n));
System.out.println(pow1(a,15));
}
//方法1:暴力方法计算a的n次幂
static int pow0(int a,int n){
int res = 1;
for (int i = 0;i < n;i++){
res *= a;
}
return res;
}
//方法2:
static int pow1(int a,int n){
if (n == 0) return 1;
int res = a;
int ex = 1;
//成倍的往上乘的
while ((ex<<1) <= n){
res = res*res;
ex<<=1;
}
//差n-ex次方没有去乘到结果里面
return res*pow1(a, n-ex);
}
}