Problem:
给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。
Intuition:
这个题目的第一反应是不是一个for循环就搞定了吗?然后写下下面一段代码
1 2 3 4 5 6 7 8
| public double Power(double base, int exponent){ double result = 1.0; for (int i = 1; i <= exponent; i++) { result *= base; } return result; }
|
但是这样是明显会被面试官diss的,指数部分为0或者小于0的时候都没有处理,底数指数均为0的时候也没有抛出异常。
Solution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| public double powerWithExponent(double base, int exponent) { double result = 1.0; for (int i = 1; i <= exponent; i++) { result *= base; } return result; }
public boolean equal(double num1, double num2) { if (Math.abs(num1 - num2) < 0.0000001) { return true; } else { return false; } }
public double power(double base, int exponent) { double result = 0.0; if (this.equal(base, 0.0) && exponent < 0) { try { throw new Exception("没有意义"); } catch (Exception e) { e.printStackTrace(); } } if (exponent == 0) { return 1.0; } else if (exponent < 0) { result = this.powerWithExponent(1 / base, -exponent); } else if (exponent > 0) { result = this.powerWithExponent(base, exponent); } return result; }
|