数值的整数次方
注意:
0的0次方是没有意义的;
0的负数负数次方也是无意义的;
注意base与0值的比较;
exponent为负数时,先转化成正数再求倒数。
(1)这种方法比较直观。while()循环。
#include<stdio.h>
#include<stdlib.h>
#define m 0.000001
double DoublePower(double base,int exponent)
{
int flags=0;
double sum=1.00;
if((base>-m)&&(base<m))
{
if(exponent<=0)
{
printf("error\n");
return -1;
}
while(exponent--)
{
sum*=base;
}
}
else
{
if(exponent<0)
{
exponent=0-exponent;
flags=1;
}
while(exponent--)
{
sum*=base;
}
if(flags==1)
{
sum=1/sum;
}
}
return sum;
}
void test()
{
printf("base为0,exponent为0:%lf\n",DoublePower(0.00,0));
printf("base为0,exponent为负数时:%lf\n",DoublePower(0.00,-1));
printf("base为0,exponent为正数:%lf\n",DoublePower(0.00,2));
printf("base为负数,exponent为正数:%lf\n",DoublePower(-2.00,2));
printf("base为正数,exponent为正数:%lf\n",DoublePower(3.00,2));
printf("base为负数,exponent为负数:%lf\n",DoublePower(-2.00,-2));
printf("base为正数,exponent为负数:%lf\n",DoublePower(2.00,-2));
}
int main()
{
test();
system("pause");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define m 0.000001
double DoublePower(double base,int exponent)
{
int flags=0;
if(base>-m&&base<m) //base与0值的比较
{
if(exponent<=0) // exponent 小于等于0时无意义
{
printf("error\n");
return -1;
}
else
{
return 0.000;
}
}
if(exponent<0) //当exponent为负数时,把标识符置为1
{
flags=1;
exponent=0-exponent;
}
if(exponent==0)
{
return 1.00;
}
exponent--;
base*=DoublePower(base,exponent); //递归实现累乘
if(flags==1)
{
base=1/base;
}
return base;
}
void test()
{
printf("base为0,exponent为0:%lf\n",DoublePower(0.00,0));
printf("base为0,exponent为负数时:%lf\n",DoublePower(0.00,-1));
printf("base为0,exponent为正数:%lf\n",DoublePower(0.00,2));
printf("base为负数,exponent为正数:%lf\n",DoublePower(-2.00,2));
printf("base为正数,exponent为正数:%lf\n",DoublePower(3.00,2));
printf("base为负数,exponent为负数:%lf\n",DoublePower(-2.00,-2));
printf("base为正数,exponent为负数:%lf\n",DoublePower(2.00,-2));
}
int main()
{
test();
system("pause");
return 0;
}