C语言实现《剑指offer》——11数值的整数次方

这篇博客介绍了如何用C语言实现《剑指offer》中第11题——计算double类型base的整数次方exponent。文章强调了在输入输出时处理double类型格式的注意事项,以及处理负指数和底数为0等特殊情况。提供了代码示例,并邀请读者在GitHub上查看完整测试样例和进行讨论。
摘要由CSDN通过智能技术生成

本篇是第11题_数值的整数次方的C语言实现:

题目描述:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

需要注意的点:

  1. scanf()在扫描double的时,应该使用"%lf";而在printf()时,“%f”和“%lf”都可以;
  2. 注意指数为负以及底数为0这些特殊情况的处理。

代码如下:

#include <stdio.h>
#define true 1
#define false 0
#define bool int 

bool global_InvalidInput = false;		//定义一个全局标志位,默认是flase,也就是有效输入
bool equal(double, double);
double Power(double, int);
double UnsignedPower(double , int);
int 
main(int argc, char* argv[])
{
	freopen("sample.txt","r",stdin);
	double base;
	int exponent;
	while(scanf("%lf",&base) != EOF)			//double在scanf时必须是%lf,在printf时可以是%f或者%lf
	{
		scanf("%d",&exponent);
		double result = Power(base,exponent);
		if(global_InvalidInput == true)
			printf("Invalid Input!!\n");
		else
			printf("%f ^ %d = %f\n",base,exponent,result);
	}
	return 0;
}

double 
Power(double base, int exponent)
{
	global_InvalidInput = false;		//每次进入Power函数都要重置
	if(equal(base, 0.0) && exponent <= 0)	//底数为0时,此时认为指数为小于等于0的值都是没意义的
	{	
		global_InvalidInput = true;
		return 0.0;
	}
	int UnsignedExponent = exponent;
	if (exponent < 0)
		UnsignedExponent = -exponent;
	double result = UnsignedPower(base, UnsignedExponent);
	if(exponent < 0)
		result = 1/result; 
	return result;
}

bool 
equal(double x1, double x2)
{
	if (x1 - x2 > -0.0000001 && x1 - x2 < 0.0000001)
		return true;
	else
		return false;
}

double
UnsignedPower(double base, int usignexponent)
{
	int i;
	double result = 1.0;
	if (0 == usignexponent)					//如果指数是0,值为1(因为Power函数中的前期处理,指数为0时,底数一定不为0)
		return result;
	for(i = 0; i < usignexponent; i++)
		result *= base;
	return result;
}

测试样例和更详细的题目描述,可以参考我的github:Matthew-Haonan的github.

持续更新,欢迎留言讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值