文章目录


题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。

思路以及解法

首先题目中的double类型应该不能拆解,但是int类型的整数exponet我们可以做点文章,我们平时求次方的时候,假设有个x的4次方,我们通常是求出一个x的平方数x2,然后两个x2相乘就可以得出x^4。

这里思路也一样,使用递归,同时考虑边界条件。
如果指数是负数,则先取反,最后取结果的倒数即可。

                                P                         o                         w                         e                         r                         (                         b                         a                         s                         e                         ,                         e                         x                         )                         =                                  {                                                                                         b                                           a                                           s                                           e                                           ∗                                           P                                           o                                           w                                           e                                           r                                           (                                           b                                           a                                           s                                           e                                           ,                                           e                                           x                                           −                                           1                                           )                                           ,                                           e                                           x                                           取                                           余                                           2                                           =                                           1                                                                                                                                   P                                           o                                           w                                           e                                           r                                           (                                           b                                           a                                           s                                           e                                           ,                                           e                                           x                                           /                                           2                                           )                                           ∗                                           P                                           o                                           w                                           e                                           r                                           (                                           b                                           a                                           s                                           e                                           ,                                           e                                           x                                           /                                           2                                           )                                           ,                                           e                                           x                                           取                                           余                                           2                                           =                                           0                                                                                              Power(base,ex)=\begin{cases} base*Power(base,ex-1),ex取余2=1 \\ Power(base,ex/2)*Power(base,ex/2),ex取余2=0\\ \end{cases}                 Power(base,ex)={basePower(base,ex1),ex取余2=1Power(base,ex/2)Power(base,ex/2),ex取余2=0

    public double Power(double base, int exponent) {
        if (exponent == 0) {
            // 指数为0则直接返回1
            return 1;
        }
        if (base == 0) {
            //底数为0直接返回0
            return 0;
        }
        // 判断指数是否为负数
        boolean isNegative = false;
        if (exponent < 1) {
            exponent = -exponent;
            isNegative = true;
        }
        double result;
        if (exponent % 2 == 1) {
            result = base * Power(base, exponent - 1);
        } else {
            double temp = Power(base, exponent / 2);
            result = temp * temp;
        }
        return isNegative ? (1.0 / result) : result;
    }

此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~

技术之路不在一时,山高水长,纵使缓慢,驰而不息。

公众号:秦怀杂货店

剑指Offer(12)--数值的整数次方_剑指Offer