题目描述

实现函数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

解题思路

  1. 使用快速幂的方法解题,图片说明,而 图片说明 以此类推。
  2. 当 n 为偶数时,图片说明
  3. 当 n 为奇数时,图片说明
  4. 当 n < 0 时,x 变为其倒数,并且 n 取绝对值。意思就是把 n 变为正整数,因为图片说明

Java代码实现

class Solution {
    public double myPow(double x, int n) {
        if (x == 0) return 0;
        if (n == 0) return 1;
        long m = n;
        if (n < 0) {
            x = 1 / x;
            m *= -1;
        }
        double res = 1.0;
        while (m > 0) {
            if ((m & 1) == 1) res *= x;
            x *= x;
            m >>= 1;
        }
        return res;
    }
}