LeetCode -- 50 Pow(x, n)(C语言版)

题目描述:

代码如下(附有详解):

double myPow(double x, int n) 
    //如果n为零,表明幂数为0,直接返回1
    if(n == 0) 
        return 1;      
    //如果n为零,表明幂数为0,直接返回x
    if(n == 1) 
        return x;    
    //p值相当于将幂数折半,减少重复计算
    //若n取该范围内为[-2147483648,2147483647],当n取最小值,
    //那么当使用n=-n时就会出现溢出的情况,这里就可以避免出现溢出的情况
    int p=n/2;
    //如果n为负数,那么将x值取其倒数,然后再将p的值乘以-1,这样就相当于
    //求x倒数的n次幂,p改为正数
    if(n < 0) { 
        //p值改为正数
        p=-p;
        //x值取其倒数
        x = 1 / x; 
    }      
    double res = myPow(x, p);
    //为了提高时间复杂度,避免重复计算,可以将n不断除二来减少计算量
    //当n为32时,除二就为16,那么只需要将x^16与自身相乘即可,若n为奇数
    //那么只需要再乘以x即可
    if(n % 2 == 0) 
        return res * res;  
    return res * res * x;   
}

剑指offer(12)--数值的整数次幂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值