请高手帮我改C程序

来源:百度知道 编辑:UC知道 时间:2024/05/14 14:23:10
本人菜鸟一个,刚学c语言,编了个求最大公约数和最小公倍数的程序,没有语法错误,但测试求最大公约数和最小公倍数的时候却通不过,请高手帮忙修改,本菜鸟不胜感激,谢了。
#include "stdio.h"
main()
{int x,y,a,b,c,max,min;
printf("请输入2个整数,中间以逗号隔开:\n");
scanf("%d,%d",&x,&y);
a=x;b=y;
max=a>b ? a:b;
min=a>b ? b:a;
c=max-min;
while(c!=min)
{max=min;min=c;c=max-min;
}
printf("x=%d,y=%d->%d,%d\n",x,y,c,x*y/c);
}

使用辗转相除法:
#include "stdio.h"
void main()
{
int a,b,n1,n2,temp;
scanf("%d%d",&n1,&n2);
if(n1<n2)
{
temp=n1;
n1=n2;
n2=temp;
}
a=n1;
b=n2;
while(b)
{
temp=b;
b=a%b;
a=temp;
}
printf("最大公约数为:%d\n最小公倍数:%d\n",a,n1*n2/a);
}

c=max-min;
while(c!=min)
{max=min;min=c;c=max-min;
}
我觉得逻辑上有点问题,你求解的思路是什么

printf("x=%d,y=%d->%d,%d\n",x,y,c,x*y/c);
感觉问题出在这里:y=%d->%d

c=max-min全改为c=max%min
while()内c!=min改为c

#include <stdio.h>
int hcf(int u,int v)
{int t,r;
if(v>u)
{ t=u;u=v;v=t;}
while((r=u%v!=0))
{ u=v;
v=r;
}
return(v);
}