剑指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
代码:
#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;
}