Leetcode每日一题:50.powx-n_强制转换

思路:递归折半相乘

Leetcode每日一题:50.powx-n_折半_02

耗时 0-4ms之间吧

double fun(double x, int n)
{
if (n == 0)
return 1;
double mid = fun(x, n / 2); //注意不要写成 int mid;这样可能会导致强制转换从而使 mid 变成 0;
if (n & 1)//如果n是奇数 n/2之后必定会少乘一个x ,所以这里补上那个x;
return mid * mid * x;
return mid * mid;
}

double myPow(double x, int n)
{
if (n == 0)
return 1.0;
if (n < 0)
{
return fun(1.0/x,n);//本来用的fun(x,-n),后来因为有个样例n=INT_MIN,转换成正数就会溢出,所以针对 x 做出调整为1.0/x;
}
return fun(x, n);
}