剑指offer中题目:http://ac.jobdu.com/problem.php?
pid=1514
- 题目描写叙述:
-
给定一个double类型的浮点数base和int类型的整数exponent。
求base的exponent次方。
- 输入:
-
输入可能包括多个測试例子。
对于每一个输入文件,第一行输入一个整数T,表示測试案例的数目,接下来的T行每行输入一个浮点数base和一个整数exponent,两个数中间用一个空格隔开。
- 输出:
-
相应每一个測试案例,
输出一个浮点数代表答案。保留两位小数就可以。
- 例子输入:
-
5
1.0 10
0.0 -5
1.0 0
1.2 5
2.0 -1
- 例子输出:
-
1.00e+00f
INF
1.00e+00f
2.49e+00f
5.00e-01f
这个题wrong了几次,就是由于abs和fabs晕了。
。。。
。
代码:
#include <stdio.h>
#include <math.h> #define PRECISION 0.00000001 double powN(double vBase, int vN)
{
double Result = 1.0; while (vN)
{
if (vN%2)
{
Result *= vBase;
--vN;
}
else
{
vBase *= vBase;
vN >>= 1;
}
} return Result;
} double getBaseExp(double vBase, int vExp)
{
int N = abs(vExp);
double Result = powN(vBase, N); if (vExp < 0)
{
return 1.0 / Result;
}
else if (vExp == 0)
{
return 1.0;
} return Result;
} int main()
{
int N;
int Exp;
double Base; scanf("%d", &N);
while (N--)
{
scanf("%lf %d", &Base, &Exp); //if (abs(Base) < PRECISION && Exp < 0)//这样就错了
//{
// //printf("error\n");
// printf("INF\n");
// continue;
//} if (fabs(Base) < PRECISION && Exp < 0)
{
printf("INF\n");
continue;
} double Result = getBaseExp(Base, Exp);
printf("%.2ef\n", Result);
}
return 0;
}