剑指 Offer 16. 数值的整数次方

剑指 Offer 16. 数值的整数次方

参考> https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/solution/mian-shi-ti-16-shu-zhi-de-zheng-shu-ci-fang-kuai-s/

思路

二分法
一个小坑
n=INT_MIN的时候(-2147483647)乘以-1会溢出
解决:使用long long存储n即可

代码

class Solution {
public:
    double myPow(double x, int n) {
        double res=1;
        long long n1=n;
        double x1=x;
        if(n1==0)
            return 1;
        else if(n1>0)
        {
            while(n1>0)
            {
                if(n1%2==0)
                {
                    x1=x1*x1;
                }else
                {
                    res=res*x1;
                    x1=x1*x1;
                }
                //cout<<"res"<<res<<endl;
                n1/=2;
            }
        }
        else
        {
            n1=n1*(-1);
            while(n1>0)
            {
                if(n1%2==0)
                {
                    x1=x1*x1;
                }else
                {
                    res=res*x1;
                    x1=x1*x1;
                }
                //cout<<"res"<<res<<endl;
                n1/=2;
            }
            res=1/res;
        }
        return res;
    }
};
posted @ 2020-10-11 01:08  韩天尊  阅读(92)  评论(0)    收藏  举报