50. Pow(x, n)
double myPow(double x, int n) {
int m;
double ans;
double temp = 1;
int flag = 0;
if(n == 0)
return 1;
m = (n>0) ? n : (-1 * n);
if(m == -2147483648){
m = 2147483647;
flag = 1;
}
ans = (n > 0) ? x : (1/x);
while(m > 1){
if(m % 2 == 0)
m = m / 2;
else{
temp = temp * ans;
m = (m - 1)/2;
}
ans = ans * ans;
}
ans = ans * temp;
if(flag == 1){
ans = ans * x;
}
return ans;
}
这题的思路就是快速幂,有两种特殊情况要注意:1.当n是负数的时候,记得要先将x换成1/x,如果到最后倒数会出现精度丢失,2.当n = -2^31时如果取绝对值会越界所以只能用特殊情况分开讨论