剑指offer 求一个数的n次方,不考虑大数问题

一定得注意取值,当指数小于0,指数大于0,指数等于0时

如果指数和底数都是0时怎么办,还有浮点数的比较

#include <stdio.h>
#define ESP 0.0000001

typedef enum bool{
	false = 0,
	true = 1
}bool;        

bool value_num = false;   //定义一个全局变量用来区分正确时返回的0和错误时返回的0
double PowWithunsignedexp(double Base, unsigned int exp);
bool equal(double One, double Two);

double MyPow (double Base, int exp)
{
	bool value_num = true;
	double result;
	unsigned int unsignedexp;
	if ( equal(Base,0.0) && exp == 0)
	{
		value_num = false;
		return 0.0;              //指数和底数都是0时返回0,value_num为false说明传值错误
	}
	if (exp == 0)
    	return 1.0;
	 else if (exp < 0)
		 unsignedexp = (unsigned int)(-exp);    //指数为负数时取绝对值
	 else 
         unsignedexp =  (unsigned int)(exp);

	 result = PowWithunsignedexp (Base,unsignedexp);   

	 if(exp < 0)  
		 return (1/result);
	 else
		 return result;
}

double PowWithunsignedexp(double Base, unsigned int exp)  //用递归求幂,因为指数为大于0的指数,有奇数和偶数两种情况
{
	if (exp == 1)
		return Base;
	else if (exp%2 == 0)
		return PowWithunsignedexp(Base,exp/2)*PowWithunsignedexp(Base,exp/2);   
	else 
		return PowWithunsignedexp(Base,exp/2)*PowWithunsignedexp(Base,(exp/2+1));

}

bool equal(double One, double Two)   //比较浮点数的大小
{
	if ((One - Two) <= ESP && (Two - One) <= ESP)
		return true;
	return 
		false;
}







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏尔肖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值