Implement pow(x, n).
题目是很简单,就是求x的n次方,但是提交的时候很费劲,TLE,超时,主要考虑一些条件问题:
1、result <1e-16 返回值0.
2、x = 1 或者-1的时候,返回值根据n的奇偶情况返回1或者-1
3、n = 0的情况,返回值1.
4、n<0的情况
不能直接累积,肯定会超时,因此要成倍的累积。
class Solution {
public:
double myPow(double x, int n) {
double result1 = 1, result;
int front = 0;
long timer;
int flag;
if (n<0)
{
flag = 0;
n = -n;
}
else
flag = 1;
if(x == 1||n==0)
return 1;
if(x==-1)
{
if(n%2==0)
return 1;
else
return -1;
}
int k = 100;
result = x;
timer = 2;
while (timer <= n)
{
result = result * result;
front = n - timer;
timer = timer * 2;
}
result1 = result1 * result;
n = front;
if(result1 < 1e-16)
return 0;
while (n--)
{
result1 = result1 * x;
}
if(flag == 1)
{
return result1;
}
else
return 1/result1;
}
};