附可运行代码剑指 Offer 16. 数值的整数次方

Posted 来老铁干了这碗代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了附可运行代码剑指 Offer 16. 数值的整数次方相关的知识,希望对你有一定的参考价值。

立志用最少的代码做最高效的表达


实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。

示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000

示例 2:
输入:x = 2.10000, n = 3
输出:9.26100

示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25

提示:
-100.0 < x < 100.0
-231 <= n <= 231-1
-104 <= xn <= 104


解法一:函数

class Solution {
    public double myPow(double x, int n) {
        return Math.pow(2.1, -3);
    }
}

解法二:快速幂

快速幂原理:

当n为奇数时: a ( n − 1 ) / 2 ∗ a ( n − 1 ) / 2 ∗ a a^{(n-1)/2}*a^{(n-1)/2}*a a(n1)/2a(n1)/2a

当n为偶数时: a n = a n / 2 ∗ a n / 2 a^{n}=a^{n/2}*a^{n/2} an=an/2an/2

若看不懂,手推一遍 5 11 5^{11} 511试一下即可。

注意:n要强转为long型,否则当取到int极限值时,会报错

class Solution {
    public double myPow(double x, int n) {
        if(x == 0) return 0;

        double res = 1;     // 新底数
        long b = n;         // 如果直接使用n,会溢出
        if(b < 0) { x = 1/x; b = -b; }; // 负数的情况

        while(b > 0) {
            if((b&1) == 1) res *= x;
            x *= x;
            b >>= 1;
        }
        return res;
    }
}

可运行代码

public class 剑指Offer16_数值的整数次方 {
    // 函数解法
    static class Solution1 {
        public double myPow(double x, int n) {
            return Math.pow(2.1, -3);
        }

        public static void main(String[] args) {
            Solution1 solution1 = new Solution1();
            System.out.println(solution1.myPow(2,3));
        }
    }
    // 快速幂(手推一遍例子就懂了)
    static class Solution2 {
        public double myPow(double x, int n) {
            if(x == 0) return 0;

            double res = 1;     // 新底数
            long b = n;         // 如果直接使用n,会溢出
            if(b < 0) { x = 1/x; b = -b; }; // 负数的情况

            while(b > 0) {
                if((b&1) == 1) res *= x;
                x *= x;
                b >>= 1;
            }
            return res;
        }

        public static void main(String[] args) {
            Solution2 solution2 = new Solution2();
            System.out.println(solution2.myPow(2,3));
        }
    }

}

以上是关于附可运行代码剑指 Offer 16. 数值的整数次方的主要内容,如果未能解决你的问题,请参考以下文章

附可运行代码剑指 Offer 12. 矩阵中的路径

剑指offer 12. 数值的整数次方

剑指offer数值的整数次方

数值的整数次方-剑指Offer

剑指offer16数值的整数次方

jreJava运行环境没有安装或错误