问题描述:实现函数double power(double base,int exponent),求base的exponent次方。不能使用库函数,同时不需要考虑大数问题。
1 package Problem11;
3 public class Power {
4 /*
5 * 问题描述: 实现函数double power(double base,int exponent),求base的exponent
6 * 次方。不能使用库函数,同时不需要考虑大数问题。
7 */
9 /**
10 * @param args
11 */
12 public double power(double base, int exponet) throws Exception {
13 double result = 0.0;
14 if (equals(base, 0) && (exponet < 0)) {
15 throw new Exception("0的负数次幂无意义");
16 }
17 if (exponet == 0) {
18 return 1.0;
19 }
20 if (exponet < 0) {
21 result = 1.0/powerWithUnsignedExponent(base, -exponet);
22 } else {
23 result = powerWithUnsignedExponent(base, exponet);
24 }
25 return result;
26 }
28 private double powerWithUnsignedExponent(double base, int exponet) {
29 double result = 1.0;
30 for (int i = 1; i <= exponet; i++) {
31 result = result * base;
32 }
33 return result;
34 }
36 // 由于计算机中表示小数都有误差,不能用等号判断两个小数是否相等。如果两个小数的差的绝对值很小
37 // 我们就可以认为它们是相等的
38 private boolean equals(double number1, int number2) {
39 if ((number1 - number2 > -0.00000001)
40 && (number1 - number2) < 0.00000001) {
41 return true;
42 }
43 return false;
44 }
46 // 写测试:把底数和指数分别设置成正数、负数、0;
47 public static void main(String[] args) throws Exception {
48 Power test = new Power();
49 System.out.println(test.power(2, 3));
50 System.out.println(test.power(2, 0));
51 System.out.println(test.power(2, -2));
52 System.out.println(test.power(0, 3));
53 System.out.println(test.power(0, 0));
54 System.out.println(test.power(0, -2));
56 }
58 }