目录
1. 题目描述
2. 一般思路
2.1 有问题的思路
#include <stdio.h>
float Power(double base, int exponent)
{
double result = 1.0;
for (int i = 0; i < exponent; i++)
{
result *= base;
}
return result;
}
int main()
{
double base = 0;
int exponent = 0;
scanf("%lf %d", &base, &exponent);
printf("%lf", Power(base, exponent));
return 0;
}
2.2 全面但不高效的思路
#define wucha 0.00000001
#include <stdio.h>
#include <math.h>
float Power(double base, int exponent)
{
if (abs(base) < wucha)
{
return 0.0;
}//底数为0,(底数指数都为0则结果默认为0)
if (exponent == 0)
{
return 1.0;
}//指数为0
double result = 1.0;
if (exponent > 0)
{
for (int i = 0; i < exponent; i++)
{
result *= base;
}
return result;
}//指数为正
else if (exponent < 0)
{
for (int i = 0; i > exponent; i--)
{
result *= base;
}
return 1 / result;
}//指数为负
}
int main()
{
double base = 0;
int exponent = 0;
while (scanf("%lf %d", &base, &exponent) != EOF)
{
printf("%lf\n", Power(base, exponent));
}
return 0;
}
2.3 面试小提示
3. 全面又高效的思路
#include <stdio.h>
float Power2(double base, unsigned int exponent)
{
if (exponent == 0)
{
return 1;
}
if (exponent == 1)
{
return base;
}
double result = Power2(base, exponent >> 1);
result *= result;
if (exponent & 1 == 1)
{
result *= result;
}
return result;
}
int main()
{
double base = 0;
unsigned int exponent = 0;
while (scanf("%lf %d", &base, &exponent) != EOF)
{
printf("%lf\n", Power2(base, exponent));
}
return 0;
}
最后,
恭喜你又遥遥领先了别人!