• 题目
  • 解题思路

    题目

    牛客网

    给定一个 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. }