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为什么等于最小公倍数 展开
#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为什么等于最小公倍数 展开
3个回答
展开全部
#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;
}
两数相乘除以最大公约数就是最小公倍数
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取余,可以看到就算不判断两个数的大小,程序通过余数交换最终也会变成大的数对小的数取余,不判断大小会造成程序碰到小的数在前面会多运行一次取余运算,运行效率降低,因此一般都会进行判断
展开全部
你用while,res没有!=0,后赋值,但是没退出循环啊,你这个成死循环了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int
m,n,i,j;
注意int型整数的取值范围,上限大概是6万多,
100000显然溢出,结果就不对了,可以考虑换成long、double型等修饰
m,n,i,j;
注意int型整数的取值范围,上限大概是6万多,
100000显然溢出,结果就不对了,可以考虑换成long、double型等修饰
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询