实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
思路,貌似挺简单,直接来咯。
static double Power(double baseNum, int exponent)
{
if (Math.Equals(baseNum,0.0)&&exponent<0)
{
return 0.0;
}
int absExponent = Math.Abs(exponent);
double result = PowerWithExponent(baseNum, absExponent);
if (exponent<0)
{
result = 1.0 / result;
}
return result;
}
static double PowerWithExponent(double baseNum, int exponent)
{
double result = 1.0;
for (int i = 1; i <=exponent; i++)
{
result *= baseNum;
}
return result;
}
按照定义来的算法,这么简单的话,肯定是有优化空间的。一般的优化空间感觉都是重复过多,如果要求8次方,不用乘8次,只要3次,即log8即可,那么将PowerWithExponent方法进行改进。
static double PowerWithExponent2(double baseNum, int exponent)
{
if (exponent==0)
{
return 1;
}
if (exponent==1)
{
return baseNum;
}
double result = PowerWithExponent2(baseNum, exponent >> 1);
result *= result;
if ((exponent&0x1)==1)
{
result *= baseNum;
}
return result;
}