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