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

题目描述:

LeetCode -- 50 Pow(x, n)(C语言版)_第1张图片

代码如下(附有详解):

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)--数值的整数次幂

你可能感兴趣的:(LeetCode,剑指offer,Pow(x,n),数值的整数次幂)