C语言,输入两个数,求最大公约数与最小公倍数~~我的哪里错了 ,谢谢

#include<stdio.h>
main()
{
int a,b,d;
scanf("%d,%d",&a,&b);
if (a==b)
{
printf("最大公约数%d",a);
printf("最小公倍数%d",a);
}
else if (a>b)
{
d=a%b;
while (b%d!=0)
b=b%d;
d=a%b;
printf("最大公约数%d",d);
printf("最小公倍数%d",a*b/d);
}
else if (b>a)
{
d=b%a;
while (a%d!=0)
a=a%d;
d=b%b;
printf("最大公约数%d",d);
printf("最小公倍数%d",a*b/d);
}
return 0;
}

辗转相除法这段不对:
while (b%d!=0)
b=b%d;
d=a%b;
改成:
while (d!=0)
{
b=a;
a=d;
d=b%a;
}
下面这段类似。最后注意下,a、b在除的过程中数值会变,最好再搞两个变量保存下初始值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-06
以下是我写的,你参考下吧
#include<stdio.h>
int a(int m,int n)//求最大公约数
{
int min;
if(m<=0||n<=0) return -1;
if(m>n) min = n;
else min = m;
while(min)
{
if(m%min==0&&n%min==0) return min;
min--;
}
return -1;
}
int b(int m,int n)//求最小公倍数
{
int max;
if(m<=0||n<=0) return -1;
if(m>n) max=m;
else max=n;
while(max)
{
if(max%m==0&&max%n==0) return max;
max++;
}
return -1;
}
int main()
{
int m,n;
printf("请输入两个数,求这两个数的最大公约数和最小公倍数!\n");
scanf("%d%d",&m,&n);
printf("%d和%d的最大公约数是%d\n",m,n,a(m,n));
printf("%d和%d的最小公倍数是%d\n",m,n,b(m,n));
return 0;
}追问

恩恩,大致看明白了,谢谢。那我的那个哪里错了呢?系统说没有错误,但是输入2个数字后按回车没有运行

追答

我再帮你看下,应该是算法上的问题

本回答被网友采纳
第2个回答  2012-11-06
while (b%d!=0)
b=b%d;
d=a%b;
==>
while (b%d!=0)
{
b=b%d;
d=a%b;
}
/////

while (a%d!=0)
a=a%d;
d=b%b;
==>
while (a%d!=0)
{

a=a%d;
d=b%b;
}
////复活语句得用花括号!! 两处 while循环体都少了花括号,结果程序流程就完全变了
第3个回答  2012-11-06
你的循环少括号吧?!那个变量d就一直不变了
第4个回答  2012-11-06
自己对比下,寻找自己的错误,这对自己比较有帮助。

参考资料:http://zhidao.baidu.com/question/406523366.html?oldq=1
最大公约数、最小公倍数、最值差的求法
相似回答