剑指Offer-数值的整数次方

11.数值的整数次方

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

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

注意:

  • 不会出现底数和指数同为0的情况
样例1
输入:10 ,2

输出:100
样例2
输入:10 ,-2  

输出:0.01

思路

主要是注意输入的指数可能是负数。这时候需要先取正,算出结果,再对结果取倒数。

直接算是O(n),慢一点。

快速幂方法的时间复杂度是O(logN)。即,先算出底数的平方。然后每次计算幂的时候取exponent的一半即可。

class Solution {
    public double Power(double base, int exponent) {
        
        if(exponent==0)
        return 1;
        if(exponent==1)
        return base;
        
        double result=1;
        
        boolean isNegative=false;
        if(exponent<0)
        {
         exponent=-exponent;
         isNegative=true;
        }
        
        //每次只算二分之exponent的幂就行,base*base可以当做常数
        result=Power(base*base,exponent>>1);
        //因为exponent/2会取整,所以如果exponent是奇数,还要再乘一次base
        if(exponent%2!=0)
        {
            result*=base;
        }
        return isNegative?1/result:result;   
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值