如何求商与余数

longleaver 2004-08-21 04:02:30
给定两个整数a,b,其中a是被除数,b是除数,要求编写一个函数,求出a/b的余数和商。函数的原型如下:
void divide(int a, int b, int *q, int *r);
//其中,a是被除数,b是除数,q用来返回商,r用来返回余数。
要求,最好能够用递归和非递归的方法分别实现这个函数。
...全文
1200 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
LGD589 2004-08-23
  • 打赏
  • 举报
回复
(int)a/b a%b
longleaver 2004-08-22
  • 打赏
  • 举报
回复
不是说越复杂越好,我没有这种爱好。
我就是想知道C语言的/和%的运算是如何实现的。
梁尚君 2004-08-22
  • 打赏
  • 举报
回复
學到了,什麽是高手??
從點滴學起,佩服!
baconbally 2004-08-22
  • 打赏
  • 举报
回复
要不要用EJB来写一个算法让你Remote调用阿
什么叫越复杂越好?
Asan13 2004-08-21
  • 打赏
  • 举报
回复
#include <stdio.h>

void divide(int a, int b, int * q, int * r)
{
*q = a / b;
*r = a - *q * b;
}

main()
{
int a, b, q, r;

printf("Input:");
scanf("%d%d", &a, &b);
divide(a, b, &q, &r);
printf("q = %d, r = %d\n", q, r);
}
Squall1009 2004-08-21
  • 打赏
  • 举报
回复
越复杂越好吗?
yaozijian110 2004-08-21
  • 打赏
  • 举报
回复

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

//非递归方法
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);

return 0;
}
longleaver 2004-08-21
  • 打赏
  • 举报
回复
不懂就别乱回答.
就是不让你用a/b和a%b来解答的。
那样的话,我还来问问题那。
ma100 2004-08-21
  • 打赏
  • 举报
回复
是*q ,呵呵不好意思
不安分的灵魂 2004-08-21
  • 打赏
  • 举报
回复
void divide(int a, int b, int *q, int *r);
{
asm{
mov eax,a;
mov ecx,b;
xor edx,edx
idiv ecx
mov *q,eax
mov *r,edx
}
}
sekelon 2004-08-21
  • 打赏
  • 举报
回复
呵呵,不理解楼主为什么要把问题复杂化
楼上的几位说的很清楚了
a/b就是商
a%b就是余数
就这么简单,不用什么递归不递归的
whyglinux 2004-08-21
  • 打赏
  • 举报
回复
void divide(int a, int b, int *q, int *r)
{
*q = a/b;
*r = a%b;
}
22b33c 2004-08-21
  • 打赏
  • 举报
回复
用递归?
不动楼主的意思!
whyglinux 2004-08-21
  • 打赏
  • 举报
回复
要这么麻烦干嘛?

a/b 就是商

a%b 就是余数
ma100 2004-08-21
  • 打赏
  • 举报
回复
void divide(int a, int b, int *q, int *r)
{
q = a/b;
r = a%b;
}

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧