编程实现两个正整数的除法,当然不能用除法操作符。
// return x/y.
int div(const int x, const int y)
{
....
// 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;
}