AcWing 27. 数值的整数次方

题目描述

实现函数double Power(double base, int exponent),求base的 exponent次方。

不得使用库函数,同时不需要考虑大数问题。

注意:

  • 不会出现底数和指数同为0的情况

样例1

输入:10 ,2

输出:100

样例2

输入:10 ,-2  

输出:0.01

问题分析 

这道题是求快速幂,用递归来进行。每次把exponent除以2,然后把base的exponent/2次幂的结果赋给half变量,视exponent的不同情况来进行不同的计算。如果exponent是偶数,那么不管exponent是正数还是负数,算出half*half就是exponent次幂的值;当exponent是奇数且大于0时,在此基础上再乘一个base就可以了;而如果exponent是奇数且小于0,那么在此基础上要除以base。递归基是exponent等于0时,返回1。

代码实现

class Solution {
public:
    double Power(double base, int exponent) {
        if(exponent == 0)
            return 1;
        double half = Power(base, exponent / 2);
        if(exponent % 2 == 0)
            return half * half;
        else if(exponent > 0)
            return half * half * base;
        else
            return half * half / base;
    }
};

猜你喜欢

转载自blog.csdn.net/mengyujia1234/article/details/90049077