【 LeetCode 】剑指 Offer 16. 数值的整数次方 (中等) 快速幂

剑指 Offer 16. 数值的整数次方
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

示例 1:

输入: 2.00000, 10
输出: 1024.00000
示例 2:

输入: 2.10000, 3
输出: 9.26100
示例 3:

输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
说明:

-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [231, 2311]

代码:

class Solution {
    
    
public:
    double p(double x,long long n){
    
     //快速幂
        double ans=1;
        while(n>0)
        {
    
    
            if(n&1) ans=ans*x;
            x=x*x;
            n>>=1; //右移一位
        }
        return ans;
    }

    double myPow(double x, long long n) {
    
     //把n改成longlong,不然好像过不了最后几个测试点
        int f=0;
        if(n<0) //负数,先求正的幂,再用1除以解
        {
    
    
            n=-n;
            f=1;
        }
        double ans=p(x,n);
        if(f==1) ans=1/ans; //负数
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_45260385/article/details/108458411
今日推荐