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
。。。
。
代码:
#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; }