0050-Pow(x, n)

2019-01-27  本文已影响0人  liyoucheng2014

Pow(x, n)

方案一


可以用递归来折半计算,每次把n缩小一半,这样n最终会缩小到0,任何数的0次方都为1,这时候我们再往回乘,如果此时n是偶数,直接把上次递归得到的值算个平方返回即可,如果是奇数,则还需要乘上个x的值。还有一点需要引起我们的注意的是n有可能为负数,对于n是负数的情况,我们可以先用其绝对值计算出一个结果再取其倒数即可

C++-源代码


class Solution {
public:
    double myPow(double x, int n) {
        
        if (n < 0) {
            
            return 1 / power(x, -n);
        }
        return power(x, n);
    }
    
    double power(double x, int n) {
        
        if (n == 0) {
            
            return 1;
        }
        
        double half = power(x, n / 2);
        if (n % 2 == 0) {
            
            return half * half;
        }
        
        return x * half *half;
    }
};

方案二


让i初始化为n,然后看i是否是2的倍数,是的话x乘以自己,否则res乘以x,i每次循环缩小一半,直到为0停止循环。最后看n的正负,如果为负,返回其倒数

C++-源代码


class Solution {
public:
    double myPow(double x, int n) {
        
        double res = 1.0;
        for (int i = n; i != 0; i /= 2) {
            
            if (i % 2 != 0) {
                
                res *= x;
            }
            x *= x;
        }
        
        return n < 0 ? 1 / res : res;
    }
};

参考Grandyang

上一篇 下一篇

猜你喜欢

热点阅读