【剑指Offer题解:java】数值的整数次方

题目

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

保证base和exponent不同时为0

题解

1、使用内置函数

/**
     * 使用内置函数
     *
     * @param base
     * @param exponent
     * @return
     */
    public double Power(double base, int exponent) {
     
        return Math.pow(base, exponent);
    }

2、暴力法

暴力法:直接相乘

注意

如果次方为负数时,我们改写成原数倒数的exponent方
在这里插入图片描述

处理代码

if (exponent < 0) {
     //如果为负数,需要进行处理
     base = 1 / base;
     exponent = -1 * exponent;
}

完整代码

  /**
     * 暴力法:直接相乘
     *
     * @param base
     * @param exponent
     * @return
     */
    public double Power2(double base, int exponent) {
     
        //1、判断次方的正负
        if (exponent == 0) return 1.0;
        if (exponent < 0) {
     //如果为负数,需要进行处理
            base = 1 / base;
            exponent = -1 * exponent;
        }
        double sum = 1.0;
        //直接循环即可
        for (int i = 0; i < exponent; i++) {
     
            sum *= base;
        }
        return sum;
    }

3、递归法(幂指数)

【剑指Offer题解:java】数值的整数次方_第1张图片

 /**
     * 递归法:快速幂
     *
     * @param base
     * @param exponent
     * @return
     */
    public double Power3(double base, int exponent) {
     
        if (exponent == 0) return 1.0;
        if (exponent < 0) {
     //先对次方做处理
            exponent = -1 * exponent;
            base = 1 / base;
        }
        return q_power(base,exponent);
    }

    public double q_power(double b, int e) {
     
        if (e == 0) return 1.0;
        double ret = Power3(b, e / 2);
        if (e % 2 == 0) {
     //偶数
            return ret * ret;
        } else {
     //奇数
            return ret * ret * b;
        }
    }

你可能感兴趣的:(java,算法)