一、题目
————————————————
给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。
————————————————
二、思路
————————————————
  这道题很容易实现,但需要注意以下陷阱:1)0的负数次方不存在;2)0的0次方没有数学意义;3)要考虑exponent为负数的情况。所以可以对exponent进行分类讨论,在对base是否为0进行讨论。
下面的讨论中 x 代表 base,n 代表 exponent。
图片说明
因为 (x*x)n/2 可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。
————————————————

三、解决问题
————————————————
测试用例

  指数和底数都分别设置为正负数和0.
————————————————

package swordoffer;

/**
 * @author LQ
 * @version 1.0
 * @date 2020-03-20 14:26
 */

/**
 *
 * 题目描述:数值的整数次方
 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
 保证base和exponent不同时为0
 */

public class Solution15 {
    public static void main(String[] args) {
        Solution15 demo = new Solution15();
        System.out.println("==============================");
        demo.test1();
        System.out.println("==============================");
        demo.test2();
        System.out.println("==============================");
        demo.test3();
        System.out.println("==============================");
        demo.test4();
        System.out.println("==============================");
        demo.test5();
        System.out.println("==============================");
        demo.test6();
        System.out.println("==============================");
        demo.test7();
        System.out.println("==============================");
    }

    /**
     * 因为 (x*x)n/2 可以通过递归求解,并且每次递归 n 都减小一半
     * 因此整个算法的时间复杂度为 O(logN)。
     * @param base
     * @param exponent
     * @return
     */
    public double Power(double base, int exponent) {
        //1)0的负数次方不存在;2)0的0次方没有数学意义;
        if(0 == base){
            if(exponent < 0){
                System.out.println("0的负数次方不存在");
            }
            if(0 == exponent){
                System.out.println("0的0次方没有数学意义");
            }
            return 0;
        }
        if(0 == exponent){
            return 1;
        }
        if(1 == exponent){
            return base;
        }
        boolean isNegative = false;
        if(exponent < 0){
            exponent = -exponent;
            isNegative = true;
        }
        double pow = Power(base * base,exponent / 2);
        if(exponent % 2 != 0){
            pow = pow * base;
        }
        return isNegative ? 1 / pow : pow;
    }
    // ========测试代码========
    void test(String testName, double base, int exponent, double expected) {
        if (testName != null)
            System.out.print(testName + ":");
        if (Power(base, exponent) == expected) {
            System.out.println("passed.");
        } else {
            System.out.println("failed.");
        }
    }

    void test1() {
        test("test1", 0, 6, 0);
    }

    void test2() {
        test("test2", 0, -6, 0);
    }

    void test3() {
        test("test3", 0, 0, 0);
    }

    void test4() {
        test("test4", 2, 6, 64);
    }

    void test5() {
        test("test5", 2, -3, 0.125);
    }

    void test6() {
        test("test6", 5, 0, 1);
    }

    void test7() {
        test("test7", -2, 6, 64);
    }

}

图片说明
————————————————
努力也是需要学习的,别再让你的努力,只感动了自己!愿你的每一次努力,都能为自己和别人创造价值。