求最大公约数和最小公倍数有错?

来源:百度知道 编辑:UC知道 时间:2024/06/08 13:56:44
#include <stdio.h>
void main()
{
int m,n,i,j,mn,a,x,y;
printf("请输入m,n\n");
scanf("%d,%d\n",m,n);
mn=m*n;
a=(m<n)?m:n;
for (i=1;i<n;i++)
{
if (m%i==0 && n%i==0)
x=i;
}
printf("m和n的最大公约数是%d\n",x);
for (i=mn;j>=((m>n)?m:n);j--)
{
if (j%m==0 && j%n==0)

y=j;
}

printf("m和n的最小公倍数是%d",y);
}

首先scanf函数的格式不对,就为scanf("%d,%d",m,n);或者scanf("%d%d",m,n);第一种格式要在输入数据时同时输入一个逗号,第二个要用空格或回车隔开,其次最大公约数算法有问题,for (i=1;i<n;i++)改为for (i=2;i<a;i++),还有一个小问题,最小公倍数时,将第一个i改成j。程序如下:
#include <stdio.h>
#include<iostream.h>
void main()
{
int m,n,i,j,mn,a,x,y;
printf("请输入m,n\n");
scanf("%d%d",&m,&n);
mn=m*n;
a=(m<n)?m:n;
for (i=2;i<a;i++)
{
if (m%i==0 && n%i==0)
x=i;
}
printf("m和n的最大公约数是%d\n",x);
for (j=mn;j>=((m>n)?m:n);j--)
{
if (j%m==0 && j%n==0)

y=j;
}

printf("m和n的最小公倍数是%d\n",y);
}

for (i=mn;j>=((m>n)?m:n);j--)
变量不统一

你查下辗转相除法吧

http://baike.baidu.com/view/255668.htm

仔细看下思路 就好解决了