c语言编程求最大公约数和最小公倍数

我的#include<stdio.h>intmain(){intm,n;intdivisor,dividend,res;/*除数被除数余数*/scanf("%d%d",&... 我的
#include<stdio.h>
int main()
{
int m,n;
int divisor,dividend,res;/*除数 被除数 余数*/
scanf("%d%d",&m,&n);
if(m>0&&n>0)
{

if(m>=n)
{
divisor=n;
dividend=m;
}
else
{
divisor=m;
dividend=n;
}
res=dividend%divisor;
while(res!=0)
dividend=divisor;
divisor=res;
res=dividend%divisor;
printf("%d",divisor);
}
else
printf("error!\n");
return 0;
}
这是我的最大公约数的求法,输入4 6 没有结果 哪里错了?
m * n / divisor为什么等于最小公倍数
展开
 我来答
刀无极啊
2015-11-13 · TA获得超过3767个赞
知道大有可为答主
回答量:2960
采纳率:85%
帮助的人:918万
展开全部
#include<stdio.h>
int main()
{
int m,n;
int divisor,dividend,res;/*除数 被除数 余数*/
scanf("%d%d",&m,&n);
if(m>0&&n>0)
{

if(m>=n)
{
divisor=n;
dividend=m;
}
else
{
divisor=m;
dividend=n;
}
res=dividend%divisor;
while(res!=0)//循环体是三条语句,不加大括号循环只执行一条语句
{
dividend=divisor;
divisor=res;
res=dividend%divisor;
}
printf("%d",divisor);
}
else
printf("error!\n");
return 0;
}
两数相乘除以最大公约数就是最小公倍数
追问
辗转相除法要求较小的数除较大的数 但是用 c++取余运算时 为什么就可以不用比较大小,把if(m>=n)
{
divisor=n;
dividend=m;
}
else
{
divisor=m;
dividend=n;
}
删去也可以算出正确结果
追答
因为比较小的数对比较大的数取余,余数就是比较小的数,比如6%12,余数为6,余数不为0,此时算术变成12对6取余,可以看到就算不判断两个数的大小,程序通过余数交换最终也会变成大的数对小的数取余,不判断大小会造成程序碰到小的数在前面会多运行一次取余运算,运行效率降低,因此一般都会进行判断
爱笑的Gift1001
2015-11-13
知道答主
回答量:18
采纳率:0%
帮助的人:7.7万
展开全部
你用while,res没有!=0,后赋值,但是没退出循环啊,你这个成死循环了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
睢奇姒乾
2019-07-11 · TA获得超过3588个赞
知道大有可为答主
回答量:2980
采纳率:28%
帮助的人:402万
展开全部
int
m,n,i,j;
注意int型整数的取值范围,上限大概是6万多,
100000显然溢出,结果就不对了,可以考虑换成long、double型等修饰
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式