编程实现两个正整数的除法

编程实现两个正整数的除法,当然不能用除法操作符。
// return x/y.
int div(const int x, const int y) 
{
  ....

}

根据题目,我们知道x/y的结果是一个整数,只是一个整数的话需要考虑的东西就比较少了。

当然如果是小数的话也是可以做的,我们可以借鉴利用两点确定一元二次函数根的方法,这个大家可自行思考,下面贴上这题的代码。

利用相减的方法,这个方法有一个非常不好的地方个人觉得,比如x=10000000,y=1;这样的话就要循环10000000,效率不好。

代码如有错误,或者还有更好的方法,还请各位道友能够批评指正。

#include<stdio.h>
#include<math.h>

/*
int div( const int x, const int y)
{
	//如果x的绝对值小于y直接返回0
	if( abs(x)<abs(y))
		return 0;

	int result=0;

	if( x<0 )
	{
		if( y<0 )
		{
			for(; x-result*y<=0  ; result++);
		}
		else
		{
			for(; x-result*y<=0 ; result--);
		}
	}
	else
	{
		if( y<0 )
		{
			for(; x-result*y>=0; result--);
		}
		else
		{
			for(; x-result*y>=0; result++);
		}
	}

	if( result<0)
		return result+1;
	return result-1;
}
*/

//用这个方法的话,直接用x,y进行比较计算,看起来会比较麻烦
//下面我们可以通过 x,y的绝对值来计算,这样就只需要求一次了,看起来很简洁

int div( const int x, const int y)
{
	int x_p=abs(x);
	int y_p=abs(y);
	
	if(x_p<y_p)
		return 0;
	int result=1;
	for(; x_p-y_p*result>=0; result++);
	
	//为什么要 ‘--’呢? 这是因为for的判断条件
	result--;
	//直接这样判断有风险,万一 x*y 溢出了就不好玩了
	if(x*y<0)
		return -result;
	
	return result;
}

int main()
{

	printf("%d \n",div(-2,-1));
	printf("%d \n",div(-2,41));
	printf("%d \n",div( 4,6));
	printf("%d \n",div(-9,-6));
	printf("%d \n",div(2,-1));

	getchar();
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值