题目

牛客网

给定一个 double 类型的浮点数 baseint 类型的整数 exponent 。求 baseexponent 次方。

解题思路

  1. n 为偶数时,$$a^n = a^{n/2} * a^{n/2}$$
  2. n 为奇数时,$$a^n = a^{n/2} a^{n/2} a$$
  3. 可以利用类似斐波纳切的方式,利用递归来进行求解
  1. public double Power(double base, int exponent) {
  2. if (base == 0) {
  3. return 0;
  4. }
  5. if (base == 1) {
  6. return 1;
  7. }
  8. int t_exponent = Math.abs(exponent);
  9. double t = PositivePower(base, t_exponent);
  10. return exponent > 0 ? t : 1 / t;
  11. }
  12. private double PositivePower(double base, int exponent) {
  13. if (exponent == 0) {
  14. return 1;
  15. }
  16. if (exponent == 1) {
  17. return base;
  18. }
  19. double t = PositivePower(base, exponent >> 1);
  20. t *= t;
  21. if ((exponent & 0x01) == 1) {
  22. t *= base;
  23. }
  24. return t;
  25. }