给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解答:默认0的所有次方都为0(包括0的0次方,和0的负幂次方)
a>>1 表示 a/2
a<<1 表示 a×2
判断奇偶:n%2==1 或 (n&1)==1
public class o_12 {
//非递归
public double Power(double base, int exponent) {
double result = 1.0;
if (base == 0)
return 0;
//return Math.pow(base, exponent);
boolean isNegetive = false;
if (exponent < 0) {
isNegetive = true;
exponent = -exponent;
}
for (int i = 0; i < exponent; i++) {
result *= base;
}
if (isNegetive)
return 1 / result;
else
return result;
}
//递归
public double Power2(double base, int exponent) {
double result = 1.0;
if (base == 0)
return 0;
boolean isNegetive = false;
if (exponent < 0) {
isNegetive = true;
exponent = -exponent;
}
result = getTheResult(base, exponent);
if (isNegetive)
return 1 / result;
else
return result;
}
//递归方法
private double getTheResult(double base, int exponent) {
if (exponent == 0)
return 1;
if (exponent == 1)
return base;
double result = getTheResult(base, exponent >> 1);
result *= result;
if ((exponent & 1) == 1)
return result *= base;
return result;
}
public static void main(String[] args) {
o_12 o12 = new o_12();
double base = -2.0;
int exponent = -3;
double result = o12.Power(base, exponent);
System.out.println(result);
double result2 = o12.Power2(base, exponent);
System.out.println(result2);
}
}