Implement pow(x, n)

简介: 问题: 实现次方运算 Implement pow(x, n). 解法: Consider the binary representation of n. For example, if it is "10001011", then x^n = x^(1+2+8+128) = x^1 * x^2 * x^8 * x^128.

问题:

实现次方运算

Implement pow(xn).

解法:

Consider the binary representation of n. For example, if it is "10001011", then x^n = x^(1+2+8+128) = x^1 * x^2 * x^8 * x^128. Thus, we don't want to loop n times to calculate x^n. To speed up, we loop through each bit, if the i-th bit is 1, then we add x^(1 << i) to the result. Since (1 << i) is a power of 2, x^(1<<(i+1)) = square(x^(1<<i)). The loop executes for a maximum of log(n) times.

 n还大于0的时候,每次循环x都在平方。遇到位为1的时候,把x乘进去。

Java代码:

    public static double myPow(double x, int n) {
        if (n == 0) {
            return 1;
        }
        if (n < 0) {
            if (n == Integer.MIN_VALUE) {
                return 1.0 / (myPow(x, Integer.MAX_VALUE)*x);
            } else {
                return 1.0 / (myPow(x,-n));
            }
        }
        double res = 1.0;
        for (;n > 0;x *= x,n>>=1) {
            if ((n & 1) > 0) {
                res *= x;
            }
        }
        return res;
    }

 

    public static double myPow(double x, int n) {
        if (n == 0) {
            return 1;
        }
        if (n < 0) {
            if (n == Integer.MIN_VALUE) {
                return 1.0 / (myPow(x, Integer.MAX_VALUE)*x);
            } else {
                return 1.0 / (myPow(x,-n));
            }
        }
        double res = 1.0;
        while (n > 0) {
            if ((n & 1) > 0) {
                res *= x;
            }
            x *= x;
            n>>=1;
        }
        return res;
    }

 

目录
相关文章
|
人工智能 BI
CodeForces - 1485D Multiples and Power Differences (构造+lcm)
CodeForces - 1485D Multiples and Power Differences (构造+lcm)
75 0
A1947 An Olympian Math Problem
Alice, a student of grade 66, is thinking about an Olympian Math problem, but she feels so despair that she cries. And her classmate, Bob, has no idea about the problem. Thus he wants you to help him. The problem is:
79 0
A1947 An Olympian Math Problem
|
Python
“cosine_distance“ “KMeansClusterer“ is not defined
“cosine_distance“ “KMeansClusterer“ is not defined
97 0
HDOJ 1014 Uniform Generator(公约数问题)
HDOJ 1014 Uniform Generator(公约数问题)
84 0
LeetCode - 40. Combination Sum II
40. Combination Sum II  Problem's Link  ---------------------------------------------------------------------------- Mean:  给你一个待选集合s和一个数n,选出所有相加之和为n的组合.
999 0
|
算法
Divide Two Integers
不能使用乘法,除法和mod operator,实现除法功能。 Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 用减法可以实现,但是太慢了。
914 0