https://leetcode.com/problems/powx-n/
实现pow(x, n),计算x的n次方
一、问题分析
测试用例如下
Input: 2.00000, 10
Output: 1024.00000
Input: 2.10000, 3
Output: 9.26100
Input: 2.00000, -2
Output: 0.25000
Explanation: 2-2 = 1/22 = 1/4 = 0.25
可知,n为整数(可正可负可为0),x为浮点数,返回值也是浮点数。
当n为0,直接返回1即可;当n为负数,则转为计算x^(-n),再返回1.0 / x^(-n)。因此只需要考虑n为正数的情况。
当n为偶数时,x ^ n = x ^ ((n/2) * 2 ) = x^(n / 2) * x^(n/2);
当n为奇数时,x ^ n = x^(n / 2) * x^(n/2) * x
二、代码实现
class Solution {
public double myPow(double x, int n) {
boolean flag = true;
long N = n;
if (n < 0) {
N = - N;
flag = false;
}
double result = pow(x, N);
return flag ? result : 1.0/result;
}
public static double pow(double x, long n) {
if (n == 1) {
return x;
}
if (n == 0) {
return 1;
}
double temp = pow(x, n / 2);
if (n % 2 == 1) {
return temp * temp * x;
}
return temp * temp;
}
}