您的位置:首页 > 其它

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

2016-03-08 09:48 435 查看
剑指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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: