【LeetCode】50. Pow(x, n)

题目

Implement pow(x, n).

Subscribe to see which companies asked this question


思路

两种方法,一:一个一个乘,最多乘INT_MAX次,显然不太好。
二:每次求 n/2 次幂,最多32次


陷阱

此题陷阱非常多,主要需要考虑几种特殊情况:
1. n 为 0:结果为1
2. n 为负数,需要先求再求倒数,或者直接求 1/x 的-n次幂
3. n 为最小的数,INT_MIN,此时不能对n直接加‘-’求负数,因为INT_MIN的相反数还是它本身,此时要单独讨论。
4. x 为0,此时如果对x直接求倒数会导致溢出
5. x 为一很小数,需要将它和一极小数比较判0,不可以直接==0 判零


代码

double newPow(double x, unsigned int n){
        double re;
        re = myPow(x,n>>1);
        re *= re;
        if (n&1==1) re = re*x;
        return re;
    }

    double myPow(double x, int n) {
        if (n==0x80000000) return newPow(1/x,n);
        if (n==0) return 1.0;
        if (abs(x-0.0)<=0.00001) return 0.0;
        if (n<0) return newPow(1/x,-n);
        else return newPow(x,n);

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值