【剑指Offer】12、数值的整数次方

  题目描述:

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

  解题思路:

  本题看似比较简单,是一个简单的指数运算,但需要完整的考虑到所有情况。首先,对于底数,如果底数为0,则0的任何次方都是0,可以直接返回0。关键在于指数,指数可能有三种情况,有可能是正数、0、负数。对于指数是0的情况,任何数的0次方为1。对于指数是负数的情况,可以将其转化为绝对值计算,求出结果之后再求倒数。

  在计算n次方的时候,为了方便,我们根据减治的思想,通过同底数指数幂的公式计算,如下列公式。这里需要注意的是奇数和偶数的不同。

  这里为了简单,我们通过递归直接实现,因此也可以不求负数的绝对值,因为一个数每次除以2,最终只有可能是0,1或者-1,将其作为递归结束条件,可以直接写出以下简洁代码。

  编程实现(Java):

   public double Power(double base, int exponent) {
        //除2计算
        if(exponent==0)
            return 1.0;
        if(exponent==1)
            return base;
        if(exponent==-1)
            return 1.0/base;
        double half=Power(base,exponent/2); //一半
        return half*half*Power(base,exponent%2); //注意奇偶不同,奇数多乘一个base
    }
posted @ 2019-04-23 22:03  gzshan  阅读(1147)  评论(0编辑  收藏  举报