//考虑Exponent周全
#include<stdio.h>
bool invalidInput=false;
bool equal(double num1,double num2){
if(num1-num2>-0.0000001&&num1-num2<0.0000001)
return true;
else return false;
}
double PowerWithUnsignedExponent(double base,unsigned int exp){
if(exp==0)
return 1;
if(exp==1)
return base;
double result=PowerWithUnsignedExponent(base,exp>>1);
result*=result;
if(exp&0x1==1)
result=result*base;
return result;
}
double Power(double base,int exponent){
if(equal(base,0.0)&&exponent<0){
invalidInput=true;
return 0.0;
}
unsigned int exp=(unsigned int)exponent;
if(exponent<0)
exp=(unsigned int)(-exponent);
double result=PowerWithUnsignedExponent(base,exp);
if(exponent<0)
result=1/result;
return result;
}
void main(){
double result=Power(2,3);
if(!invalidInput)
printf("%3.2f\n",result);
else printf("输入无效的数字\n");
result=Power(-2,3);
if(!invalidInput)
printf("%3.2f\n",result);
else printf("输入无效的数字\n");
result=Power(2,0);
if(!invalidInput)
printf("%3.2f\n",result);
else printf("输入无效的数字\n");
result=Power(0,0);
if(!invalidInput)
printf("%3.2f\n",result);
else printf("输入无效的数字\n");
result=Power(0,4);
if(!invalidInput)
printf("%3.2f\n",result);
else printf("输入无效的数字\n");
result=Power(0,-4);
if(!invalidInput)
printf("%3.2f\n",result);
else printf("输入无效的数字\n");
}
PowerWithUnsignedExponent
最新推荐文章于 2019-11-22 11:00:16 发布