【LeetCode】50.Pow(x,n)反复平方法解决快速幂问题

参加我之前的一篇文章:【数论基础】判断素数、埃拉托色尼筛选法、欧几里得算法、反复平方法https://blog.csdn.net/qq_41895747/article/details/104379060

题目:

【LeetCode】50.Pow(x,n)反复平方法解决快速幂问题

class Solution {
public:
    double myPow(double x, int n) {
        double res = 1;
        int m = abs(n);
        while(m>0){
            if(m%2)
                res*=x;
            x*=x;
            m/=2;
        }
        return n>0?res:1/res;
        // return pow(x,n);
    }
};

其实已经完成了快速幂的思想,但在OJ中有一个超大的负数测试点卡住,服了

换一下就可以:

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;
    }
};

抖个机灵,直接写一句return pow(x,n);也能把这题A了哈哈

【LeetCode】50.Pow(x,n)反复平方法解决快速幂问题【LeetCode】50.Pow(x,n)反复平方法解决快速幂问题 沉迷单车的追风少年 发布了323 篇原创文章 · 获赞 315 · 访问量 14万+ 私信 关注
上一篇:427,剑指 Offer-数值的整数次方


下一篇: 50 367