032数值的整数次方(keep it up)

时间:2023-03-09 18:05:25
032数值的整数次方(keep it up)

剑指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;
}