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


posted @ 2016-03-08 09:48  mengfanrong  阅读(239)  评论(0编辑  收藏  举报