LeetCode - 二分法计算 pow(x, n)

Pow(x, n)

Implement pow(x, n), which calculates x raised to the power n (xn).

Example 1:

Input: 2.00000, 10
Output: 1024.00000

Example 2:

Input: 2.10000, 3
Output: 9.26100

Example 3:

Input: 2.00000, -2
Output: 0.25000

Explanation: 2-2 = 1 / 22 = 1 / 4 = 0.25

Note:

-100.0 < x < 100.0
n is a 32-bit signed integer, within the range [−231, 231 − 1]

Solution:

  用第一个例子来说明,计算过程如下图所示。
在这里插入图片描述

double myPow(double x, int n) {
    if(n == 0) return 1;
    long nn = static_cast<long>(n);  // 必须转一下,不然会出现-2147483648的情况
    if(nn < 0)
    {
        nn = -nn;
        x = 1.0 / x;
    }
    double res = 1;
    while(nn != 0)
    {
        if(nn % 2 == 1)
            res *= x;
        x *= x;
        nn /= 2;
    }
    return res;
}

猜你喜欢

转载自blog.csdn.net/Bob__yuan/article/details/87916750