Pow(x, n)

Pow(x, n)

Implement pow(x, n).

题目:实现求幂函数。

分析:基本算法比较简单,递归二分,5^4 = 5^2 * 5^2  主要在于对一些特殊情况的处理:

  1. x为0,double判断是否为0不能直接用== 
  2. n为负数,有除法
  3. n=INT_MIN的时候,转换成正数会超出int范围

代码:

class Solution {
public:
    double pow(double x, int n) {
        if(abs(x-0)<0.000001 && n<=0) return 0;//0^0  0^(-n)
        if(n==0) return 1.0;
        if(n==1) return x;
        if(abs(x-1)<0.000001) return 1.0;

        long long t;
        t=(long long)(n);
        t=abs(t);        
        double ans=powAbove0(x,t);
        
        if(n<0) return 1.0/ans;
        else return ans;
        
    }
    
    double powAbove0(double x, long long n){ //n>0 long long 
        if(n==1) return x;
        double t=powAbove0(x,n>>1);
        double res=t*t;//powAbove0(x,n>>1)节省一次计算
        if(n&1==1) res=res*x;
        return res;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值