数值的整数幂

来源:互联网 发布:模拟基金软件app 编辑:程序博客网 时间:2024/05/01 22:01
题目描述:

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

输入:

输入可能包含多个测试样例。
对于每个输入文件,第一行输入一个整数T,表示测试案例的数目,接下来的T行每行输入一个浮点数base和一个整数exponent,两个数中间用一个空格隔开。

输出:

对应每个测试案例,
输出一个浮点数代表答案,保留两位小数即可。

样例输入:
51.0 100.0 -51.0 01.2 52.0 -1
样例输出:
1.00e+00fINF1.00e+00f2.49e+00f5.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;elsereturn 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;}
结果:
 
0 0