每日一练——Java数值的整数次方
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
实现源码:
方法一:投机取巧
public class JianZhiOffer2 {
public static void main(String[] args) {
System.out.println(new JianZhiOffer2().Power(3,4));
}
public double Power(double base, int exponent) {
return Math.pow(base,exponent); // 次方
}
}
方法二:笨方法
public class JianZhiOffer2 {
public static void main(String[] args) {
System.out.println(new JianZhiOffer2().Power(0, 2));
}
public double Power(double base, int exponent) {
double n = base;
if (base != 0) {
if (exponent > 1) {
for (int i = 0; i < exponent-1; i++) {
base = base * n;
}
return base;
} else if (exponent < 0) {
for (int i = 0; i < -exponent-1; i++) {
base = base * n;
}
return 1 / base;
} else if (exponent == 1) {
return n;
} else {
return 1;
}
} else {
return 0;
}
}
第三种:百度快速幂后,写了一个简洁的
public double Power(double base, int exponent) {
double r = 1;
if (exponent < 0) {
exponent = -exponent;
while (exponent-- != 0) r *= base;
r = 1 / r;
} else {
while (exponent-- != 0) r *= base;
}
return r;
}
思考
一看到题目,首先想到java的一个Math类,肯定包含次方的方法,所以就直接调用了。但是想想也知道这样肯定不对,据别人指出,剑指offer原书说了,不能调用写好的类的方法,需要自己写出算法,我就乖乖写了第二种笨方法。第三种是学习快速幂后的。