实现 pow(x, n). (n是一个整数)
样例
样例 1:
输入: x = 9.88023, n = 3
输出: 964.498
样例 2:
输入: x = 2.1, n = 3
输出: 9.261
样例 3:
输入: x = 1, n = 0
输出: 1
挑战
时间复杂度O(logn)
注意事项
不用担心精度,当答案和标准输出差绝对值小于1e-3
时都算正确
二分法,求x的n次方,可以理解成先求x的n/2次放 , 然后结果 * 结果 (针对n是偶数的时候),如果n的奇数的话还需要 乘本身
class Solution {
public:
/**
* @param x: the base number
* @param n: the power number
* @return: the result
*/
// double myPow(double x, int n)
// {
// // write your code here
// return pow(x,n);
// }
double _myPow(double x, long long n) {
// 使用long long以避免 -2147483648 边界数据出错
if (n == 0)
return 1.0;
double half = _myPow(x, n / 2);
if (n % 2)
return half * half * x;
else
return half * half;
}
public:
double myPow(double x, int n) {
return n < 0 ? 1.0 / _myPow(x, -n) : _myPow(x, n);
}
};