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


你可能感兴趣的:(Algorithm,C++,算法)