剑指offer 面试题16 数值的整数次方

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

输入:double型浮点数base,int型整数exponent。

输出:double型结果。

思路:本题思路不难,但是容易忘记处理各种边界值,异常值。

当exponent为正数时,base直接累乘exponent-1次,得到结果

异常值1:当exponent为负数时

处理方法:先取得exponent的绝对值,然后做累乘,得到中间结果,最后结果为1.0/中间结果。

异常值2:当base为0时,exponent为负数时,容易出现1/0.

处理方法:增加一个判断,抛出异常。

代码:

class Solution {
public:
    double Power_Core(double base, unsigned int exponent)
    {
        double result=base;
        for(unsigned int i=1;i

复杂度分析:时间复杂度为O(exponent),空间复杂度为O(1)。

性能优化:通过优化Power_Core函数,将时间复杂度减小为 O(log exponent),空间复杂度不变。

    double Power_Core(double base, unsigned int exponent)
    {
        if(exponent==1)
            return base;
        double result=Power_Core(base,exponent>>1);
        result *= result;
        if(exponent&0x1==1)
            result*=base;
        return result;
    }

 

你可能感兴趣的:(剑指offer)