题目来源: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
-
提示:
-
请特别注意不同的编译器对于科学计数法格式输出中指数位数的差别。建议使用九度Online Judge所使用的编译环境。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define ep 0.0000001 double Quick_Mod(double iBase, int iExponent)//计算a^b { double a = 1.0; if(iExponent == 0) return 1; if(iExponent == 1) return iBase; while(iExponent) { if(iExponent & 1) { a *= iBase; iExponent--; } iBase *= iBase; iExponent >>= 1; } return a; } bool Equal(double a, double b)//判断是否为0.0,不能直接用==号直接判断 { if(a - b >= -ep && a - b <= ep) return true; return false; } int main() { int iExponent, n; double iBase; scanf("%d", &n); while(n--) { scanf("%lf %d", &iBase, &iExponent); if(Equal(iBase, 0.0) && iExponent < 0 )//0的负次方,是没意义的 { printf("INF\n"); continue ; } if(iExponent >= 0) printf("%.2ef\n", Quick_Mod(iBase, iExponent)); else if(iExponent < 0) printf("%.2ef\n", (1.0/Quick_Mod(iBase, -iExponent))); } return 0; }