-
题目描述:
-
给定一个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<stdlib.h> #include<math.h> bool equal(double,double);//判断两个double变量是否相等 double powerWithUnsignedExp(double,unsigned int); bool isInvalidInput=false;//判断是否底数是0的标志 double power(double base,int exponent) { isInvalidInput=false; if(equal(base,0.0)&&exponent<0) { isInvalidInput=true; return 0.0; } unsigned int absExponent = (unsigned int)(exponent); if(exponent<0) absExponent=(unsigned int)(-exponent);//次数是负数 double result=powerWithUnsignedExp(base,absExponent); if(exponent<0) result=1.0/result; return result; } double powerWithUnsignedExp(double base,unsigned int exponent) { if(exponent==0) return 1; if(exponent==1) return base; double result=powerWithUnsignedExp(base,exponent>>1);//减少乘法的次数,1,2,4,8,16.。。 result*=result; if(exponent&0x1==1) result*=base; return result; } bool equal(double num1,double num2) { if(num1-num2>-0.0000001 &&(num1-num2<0.0000001)) return true; else return false; } int main() { int n,exp; double base; while(scanf("%d",&n)!=EOF) { int i; for(i=0;i<n;i++) { isInvalidInput=false; scanf("%lf %d",&base,&exp); double result =power(base,exp); if(!isInvalidInput) printf("%.2ef\n",result); else printf("INF\n"); } } return 0; }
-
-