数值的整数次方

214 阅读1分钟

题目

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

输入: x = 2.00000, n = 10
输出: 1024.00000

对于计算x的n 次幂函数,暴力办法是x乘n次,这样会超出时间限制。O(n).

方法利用二进制的思想:

例子(5的9次方),将9转为2进制 1001,这样我们将9次循环转为4次,其值越大,循环次数变小。

image.png

代码

class Solution {
    public double myPow(double x, int n) {
        double res = 1.0; //用于迭代计算初始值

        long b = n; //转为long是加大取值范围。
        long c ;
        if(b < 0){
            x = 1/x;
            b= -b;
        }
        List<Integer> list = new LinkedList<>();
        while (b>0){
            c = b%2;
            list.add((int)c);
            b /=2;
        }

        for(int i =0; i<list.size();i++){
            if (list.get(i) == 1){
                res *=x;
            }
            x *= x;
        }
        
        return res;

    }
}

简化版

class Solution {
    public double myPow(double x, int n) {
        double res = 1.0;

        long b = n;
        
        if(b < 0){
            x = 1/x;
            b= -b;
        }
        while(b>0){
            if(b%2 == 1){
                res *=x;
            }
            x *=x;
            b >>=1;
        }
        return res;
        
    }
}