数值的整数次方


注意:

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;
}

(2)采用递归函数实现

#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;
}

结果:

wKiom1cuqWCgNMNkAAAk73gIvIs819.png