用C语言编写一个可以求输入的两个数的最大公约数和最小公倍数的程序。

可以运行,不能得到答案

#include <stdio.h>
void main()
{
int m,n,k,min,max,i;
scanf("%d%d",&m,&n);
if(n<m)
{
k=n;
n=m;
m=k;
}
for(i=m;i>0;i++)
{
if((m%i==0)&(n%i==0))
{
max=i;
break;
}
}
min=m*n/max;
printf("%d和%d的最大公约数是%d\n",m,n,max);
printf("%d和%d的最小公倍数是%d\n",m,n,min);
}
这个是我的程序,其中利用了最小公倍数是两个数的乘积除以最大公倍数,希望能够帮到你。追问

我还没学void 和for 可以用int型和while语句解决吗?

追答

#include
int main()
{
int m,n,k,min,max,i;
scanf("%d%d",&m,&n);
if(n0)
{
if((m%i==0)&(n%i==0))
{
max=i;
break;
}
i--;
}
min=m*n/max;
printf("%d和%d的最大公约数是%d\n",m,n,max);
printf("%d和%d的最小公倍数是%d\n",m,n,min);
}
定义main函数的类型的时候,void和int是没有区别的,其实绝大多数时候定的是void,也就是空类型。for语句和while语句是一样的,这个是我修改后的程序,希望同样能帮到你。

追问

我看懂您求最大公约数的方法了,的确很新颖。如果要用辗转相除法应该怎么表示?

追答

#include<stdio.h>

int main()

{

int m,n,r,p,k;

scanf("%d%d",&m,&n);

if(n>m)

{

k=n;

n=m;

m=k;

}

p=m*n;

while(m!=0)

{

r=n%m;

n=m;

m=r;

}

printf("这是最大公约数:%d\n",n);

printf("这是最小公倍数:%d\n",p/n);

return 0;

}

这个是我给你修改后的程序,你的程序思路上是正确的,只是有两个细节错了。

    两个数值比较的时候,if里面的语句应该是(n>m),,而不是(n<m);2

    while里面应该是(m!=0),而不是(m=0);

温馨提示:答案为网友推荐,仅供参考
相似回答