数值的整数次方

来源:互联网 发布:mac上好用的翻墙软件 编辑:程序博客网 时间:2024/05/24 03:21

题目

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

思路

先简单处理一下指数:
如果指数为0或者1可以直接给出结果;
如果指数为负数,那么可以将指数取正来计算,并且将最后结果取倒数即可;

接下来着重处理一般情况(不考虑base为0,指数为负的情况,无意义),即指数为正:
设n的m次方表示为n^m,
如果m为偶数,那么n^m = (n ^ (m / 2)) ^ 2,即只要计算n的m/2次方再平方就可以了;
如果m为奇数,那么n^m = (n ^ (m / 2)) ^ 2 * n,即只要计算n的m/2次方再平方,然后再乘上n就可以了;
这样一直递归下去,可以在O(logn)的时间内得到结果。

参考代码

class Solution{public:    double Power(double base, int exponent)    {        if (exponent == 0) return 1.0;        if (exponent == 1) return base;        bool reverse = false;        if (exponent < 0)        {            exponent = -exponent;            reverse = true;        }        double res = Power(base, exponent >> 1);        res *= res;        if (exponent & 1)        {            res *= base;        }        if (reverse)        {            res = 1.0 / res;        }        return res;    }};