【剑指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、递归法(幂指数)

在这里插入图片描述

 /**
     * 递归法:快速幂
     *
     * @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;
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_44895397/article/details/113120099