一般解法:(相对低效)
/**
* 题目:
* 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
*/
public class P110_IntegerPowerOfNumber {
public double IntegerPowerOfNumber(double base, int exponent) {
double result = 0;
//输入底数为0
if (base == 0) {
return 0;
}
//输入指数为0
if (exponent == 0) {
return 1;
}
result = 1;
int temp = Math.abs(exponent);
for (int i = 1; i <= temp; i++) {
result *= base;
}
if (exponent > 0) {
result = result;
}
if (exponent < 0) {
result = 1 / result;
}
return result;
}
public static void main(String[] args) {
double base = 1;
int exponent = 0;
P110_IntegerPowerOfNumber test = new P110_IntegerPowerOfNumber();
double result = test.IntegerPowerOfNumber(base, exponent);
System.out.print(result);
}
}
高效解法:
/** * 题目: * 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 * 解题思路: * 当指数为偶数时:a^n=a^(n/2)*a^(n/2) * 当指数为奇数时:a^n=a^(n/2)*a^(n/2)*a */ public class P110_IntegerPowerOfNumber_ { public double Power(double base, int exponent) { //指数为0,返回1 if (exponent == 0) { return 1; } //指数为1,返回底数本身 if (exponent == 1) { return base; } int absExponent = Math.abs(exponent); //假设指数为偶数次方 a^n=a^(n/2)*a^(n/2) double result = Power(base, absExponent >> 1); result *= result; //如果指数为奇数,将上面结果再乘以底数本身 if (absExponent % 2 == 1) { result = result * base; } if (exponent < 0) { result = 1 / result; } return result; } public static void main(String[] args) { double base = 2; int exponent =-3; P110_IntegerPowerOfNumber_ test = new P110_IntegerPowerOfNumber_(); double result = test.Power(base, exponent); System.out.print(result); } }