public static double MyPow(double x, int n, Func<double, long, double> func)
{
long N = n;
return N > 0 ? func(x, N) : 1 / func(x, -N);
}
public static double MyPow(double x, int n, bool type = true)
{
long N = n;
if (N > 0)
{
if (type)
return quickMul2(x, N);
return quickMul(x, N);
}
else
{
if (type)
return 1 / quickMul2(x, -N);
return 1 / quickMul(x, -N);
}
}
static double quickMul(double x, long n)
{
if (n == 0)
return 1;
double y = quickMul(x, n >> 1);
y *= y;
if ((n & 1) == 1)
y *= x;
return y;
}
static double quickMul2(double x, long n)
{
double result = 1d;
while (n > 0)
{
if ((n & 1) == 1)
result *= x;
x *= x;
n >>= 1;
}
return result;
}
直接的调用MyPow函数就可以了