首先注意n为Integer.MIN_VALUE的情况,取反的时候取不到它的相反数。
使用库函数可以AC;
不使用库函数自己写指数运算的过程要用递归的办法降低时间复杂度,在正负的情况中按奇数偶数分情况讨论。
package leetcode50power;
public class Solution {
/*
double myPow(double x, int n) {
int i;
double res = 1;
if(n==0)
return 1;
else if(n>0)
{
return Math.pow(x, n);
}
else
{
if(n==Integer.MIN_VALUE)
{
return 1/(Math.pow(x, Integer.MAX_VALUE)*x);
}
else
return Math.pow(x, n);
}
}
*/
double myPow(double x, int n) {
int i;
double res = 1;
if(n==0)
return 1;
else if(n>0)
{
if(n%2==0)
{
double temp = myPow(x,n>>1);
res = temp*temp;
}
else
{
double temp = myPow(x,(n-1)>>1);
res = temp * temp * x;
}
}
else
{
if(n==Integer.MIN_VALUE)
res = 1 / myPow(x,(int)(Integer.MAX_VALUE*x));
else
res = 1 / myPow(x,-n);
}
return res;
}
public static void main(String args[])
{
double x=0.000000000000001;
int n=10087787;
double res=new Solution().myPow(x,n);
System.out.println(res);
}
}