求两个正整数m,n的最大公约数和最小公倍数

来源:百度知道 编辑:UC知道 时间:2024/05/29 16:38:18
#include "stdio.h"
main()
{
int m,n,i,s,p;
printf("Input:");
scanf("%d %d",&m,&n);
while(m>=1&&n>=1)
{
i=1;
while(i<=m&&i<=n)
{
s=1;
if(m%i==0&&n%i==0)
{
s=s*i;
m=m/i;
n=n/i;
}
i++;
}
p=m*n/s;
printf("%d,%d\n",s,p);
}

}
上面这是我写的,不知道错在哪?帮帮我,谢谢了!

有时间就去分析一下经典的求最大公约数和最小公倍数代码

首先,m和n的值需要保存下来,否则最后都变了。然后while(m>=1&&n>=1)
使程序陷入死循环(调试时可按照程序执行的条件和顺序一步步推算)改过后的程序如下:void main()
{
int m,n,i=1,s=1,p;
printf("Input:");
scanf("%d %d",&m,&n);
int number1=m,number2=n;
while(i<=m&&i<=n)
{if(m%i==0&&n%i==0)
{ s=s*i;
m=m/i;
n=n/i;
}
i++;
}
p=number1*number2/s;
printf("%d,%d\n",s,p);
}

没错啊1