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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章