标签:leetcode
https://oj.leetcode.com/problems/powx-n/
http://blog.csdn.net/linhuanmars/article/details/20092829
public class Solution {
public double pow(double x, int n) {
// Solution A:
// return pow_Recursion(x, n);
// Solution B:
return pow_Shift(x, n);
}
////////////////////////
// Solution B: Number
//
// Any num can be represented by 2.
private double pow_Shift(double x, int n)
{
if (x == 0)
return 0d;
if (n == 0)
return 1d;
boolean neg = n < 0;
n = Math.abs(n);
double r = 1d;
while (n > 0)
{
if (n % 2 == 1)
r *= x;
x *= x;
n = n >> 1;
}
if (neg)
return 1 / r;
return r;
}
////////////////////////
// Solution A: Recursion
//
private double pow_Recursion(double x, int n)
{
// x ^n =
// x ^ (n / 2) * x (n / 2) * x (n % 2)
if (x == 0)
return 0;
if (n > 0)
return p(x, n);
else
return 1 / p(x, -n);
}
private double p(double x, int n)
{
if (n == 0)
return 1;
double v = p(x, n / 2);
if (n % 2 == 0)
return v * v;
else
return v * v * x;
}
}标签:leetcode
原文地址:http://7371901.blog.51cto.com/7361901/1598627