给出一个double类型的m和一个int类型的n这题需要注意一下几点:
1.n可为负数
2.m可为0
3.程序的异常情况
4.double之间的比较
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
int e=0.0000001f;
bool flagerror;
double GetPowerValue(double m,unsigned n);
bool isequal(double f1,double f2)
{
if(fabs(f1-f2)<=e)
return true;
else
return false;
}
double unsingedPowNum(double m,int n)
{
if(isequal(m, 0.0)&&n<0)
{
flagerror=true;
return -1;
}
if(n==0)return 1.0;
unsigned unsignenum;
if(n<0)
unsignenum=(unsigned)(-n);
else
unsignenum=(unsigned)n;
double res=GetPowerValue( m, unsignenum);
if(n<0)
res=1.0/res;
return res;
}
double GetPowerValue(double m,unsigned n)
{
if(n<=1) return m;
double res=GetPowerValue(m, n>>1);
res*=res;
if((n&0x1)==1)
res*=m;
return res;
}
int main()
{
//freopen("/Users/sanyinchen/Workspaces/oc/conse/B_ali/B_ali/in.txt","r",stdin);
double m;
int n,t;
scanf("%d",&t);
while(t--)
{
scanf("%lf %d",&m,&n);
flagerror=false;
double res=unsingedPowNum(m,n);
if(flagerror)
printf("INF\n");
else
printf("%.2ef\n",res);
}
return 0;
}