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

题目内容:
输入两个正整数m和n,求它们的最大公约数和最小公倍数。
【算法分析】辗转相除法:使k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,使n代替m, k代替n,,重复以上过程,直到k值为0,此时n为最大公约数。最小公倍数=(m×n)/ 最大公约数。
输入格式:输入两个正整数,使用空格隔开
输出格式:输出其最大公约数和最小公倍数,使用空格隔开
输入样例:45 30
输出样例:15 90
#include
int main()
{
unsigned int m,n,k,x,y;
scanf("%d %d",&m,&n);
x=n;
y=m;
if((k=m%n)==0) printf("%d %d",n,m);
else
{
do
{
k=m%n;
y=x;
x=k;
}while((k=m%n)==0);
printf("%d %d",k,(m*n)/k);
}
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 1ms 256kb
2
用例2通过 1ms 256kb
4
用例3未通过 0ms 0kb
结果错误
0

为什么OJ系统判定我例3未通过呢,我哪里有什么问题吗?

k=m%n;
y=x;
x=k;
这里要用m和n,把xy删掉,要么k也要x和y来算,你这前后变量不一致呀
另,根本没必要分两种情况讨论,如果m能整除n,m%n==0,那么最大公约数不就是n吗,那么m*n/n不就是m吗,同一个公式就行了