错误代码
#include<stdio.h>
#include<stdlib.h>
int main()
{ int m,n,c,b = 10,m1,n1;
printf("Enter m&n:/n");
scanf("%d %d",&m,&n);
if(m>n) /*使m成为较小的数*/
{c=n;n=m;m=c;}
m1=m;
n1=n;
while(b!=0)
{ /*辗转相除*/
b=n1%m1;
n1=m1;
m1=b;
}
printf("%d,%d",m1,m*n/m1);
system("pause");
return 0;
}
//错误原因是 循环中最后m1的值为零,而输出的最小公倍数中m1作为除数,应该将其中的句子变换一下顺序。
// 答案参见正确的代码。
正确代码
#include<stdio.h>
#include<stdlib.h>
int main()
{ int m,n,c,b,m1,n1;
printf("请输入两个正整数m,n:/n");
scanf("%d %d",&m,&n);
if(m>n) /*使m成为较小的数*/
{c=n;n=m;m=c;}
m1=m;
n1=n;
b=n1%m1; /*把这一步从循环中提出来,先执行便解决了问题*/
while(b!=0)
{ /*辗转相除*/
n1=m1;
m1=b;
b=n1%m1;
}
printf("最大公约数和最小公倍数分别是:%d,%d",m1,m*n/m1);
system("pause");
return 0;
}