码迷,mamicode.com
首页 > 其他好文 > 详细

数值的整数次方

时间:2016-05-09 07:21:48      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:数值的整数次方

数值的整数次方


注意:

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

结果:

技术分享

本文出自 “liveyoung” 博客,转载请与作者联系!

数值的整数次方

标签:数值的整数次方

原文地址:http://10707042.blog.51cto.com/10697042/1771254

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!