1.最简单也是效率最低的 for循环N次x的相乘 再次不做任何的解释
2.用递归来减半循环,A:当N为偶数的时候,(x^n/2)^2 B:当n为奇数的时,x(x^m)^2 C:n等于0 返回1 D:n等于1 返回x
3.使用位移,把n转化为二进制数,扫描每个二进制位,若为0则,则直接平方,若为1,否则平方后再乘以x。
第二种第三种具体实现如下:
代码块
代码块语法遵循标准markdown代码,例如:
public class X_n {
public static void main(String args[]) {
int x = power(3, 4);
System.out.println(x);
int x1 = powerByBinary(3, 5);
System.out.println(x1);
}
/**
* 第二种方法:把n转化为二进制数,扫描每个二进制位,若为0则,则直接平方,否则平方后再乘以x
*
* @param x
* @param n
* @return
*/
private static int powerByBinary(int x, int n) {
if (n == 0 ) {
return 1;
}
if (n == 1 ) {
return x;
}
int y = 1;
String str = Integer.toBinaryString(n);
for (int a = 0; a < str.length(); a++) {
// char类型转化为int
int s = Integer.parseInt(String.valueOf(str.charAt(a)));
y = y * y;
System.out.println("=============== ");
System.out.println("y * y = " + y);
if (s == 1) {
y = y * x;
System.out.println("y * x = " + y);
}
}
return y;
}
/**
* 第一种方法:采用递归的方法,x的n次方,若n为偶数,则x的n次方等于(x^n/2)^2,否则等于x(x^m)^2
*
* @param x
* @param n
* @return
*/
private static int power(int x, int n) {
int result = 0;
if (n == 0) {
result = 1;
} else {
result = power(x, n / 2);
result = result * result;
if (n % 2 != 0) {
result = x * result;
}
}
return result;
}
}