给定两个整数a,b,其中a是被除数,b是除数,要求编写一个函数,求出a/b的余数和商。函数的原型如下:
void divide(int a, int b, int *q, int *r);
//其中,a是被除数,b是除数,q用来返回商,r用来返回余数。
要求,最好能够用递归和非递归的方法分别实现这个函数。
...全文
120015打赏收藏
如何求商与余数
给定两个整数a,b,其中a是被除数,b是除数,要求编写一个函数,求出a/b的余数和商。函数的原型如下: void divide(int a, int b, int *q, int *r); //其中,a是被除数,b是除数,q用来返回商,r用来返回余数。 要求,最好能够用递归和非递归的方法分别实现这个函数。
//非递归方法
void divide(int a, int b, int *q, int *r)
{
int iChu,iBei,iShang;
iBei = abs(a);
iChu = abs(b);
iShang = 0;
while (iBei > iChu)
{
iShang++;
iBei -= iChu;
}
if ( (a >= 0 && b>= 0) || (a < 0 && b < 0) )//a b 同号
{
*q = iShang;
}
else//a b 不同号
{
*q = -iShang;
}
*r = a - b * (*q);
}
/* 递归的解法 */
void DIVIDE(int a, int b, int *q, int *r)
{
if (a >= b)
{
a -= b;
(*q)++;
DIVIDE(a,b,q,r);
}
else
{
*r = a;
}
}
void Chufa(int a, int b, int *q, int *r)
{
*q = 0;
DIVIDE(abs(a),abs(b),q,r);
if (!(a >= 0 && b>= 0) || (a < 0 && b < 0) )//a b 不同号
{
*q = -(*q);
*r = a - b * (*q);
}
}
int main(int argc,char *argv[])
{
int a,b,q,r;
a = 107; b = 5;
divide(a,b,&q,&r);
printf("%d / %d = %d yu %d\n",a,b,q,r);
a = -107; b = 5;
Chufa(a,b,&q,&r);
printf("%d / %d = %d yu %d\n",a,b,q,r);
a = 452; b = -43;
Chufa(a,b,&q,&r);
printf("%d / %d = %d yu %d\n",a,b,q,r);