注册 登录
编程论坛 C图形专区

求最大公约数,最小公倍数,(新手请指教)

tianmao19938 发布于 2015-05-10 22:25, 807 次点击
觉得编的挺对的就是运行不出来,给检查检查呗
#include <stdio.h>
 void main()
{
     int m,n,i,j,k;
     scanf("%d%d",&m,&n);
     if(m>n)
     {i=m;
     m=n;
     n=i;
     }
     
if(m==n)
printf("the number are error");
else {
    for(j=m;j>=1;j--)
{
    if(m%j==0&&n%j==0)
printf("最大公约数是%d",j);break;
}
for(k=n;k>=n;k++)
{if(k%m==0&&k%n==0)
printf("最大公倍数是%d",k);break;
}
}
 }
3 回复
#2
取名字2015-05-12 16:11
for(j=m;j>=1;j--)
{
    if(m%j==0&&n%j==0)
printf("最大公约数是%d",j);break;
}
    照楼主的程序,因为没有加花括号,所以系统认为你的if语句就只包括“printf("最大公约数是%d",j);”这一句,当执行完这一句之后,程序就执行到“break;”无条件退出本轮循环,所以有可能找不到正确的公约数,下面找公倍数的循环代码存在同样的问题。
    希望以上的分析能够帮到楼主!

[ 本帖最后由 取名字 于 2015-5-12 16:28 编辑 ]
#3
取名字2015-05-12 19:48
在楼主原来的程序上修改:
#include <stdio.h>
 void main() {
int m,n,i,j,k;
scanf("%d%d",&m,&n);
if(m>n) {i=m; m=n; n=i; }

if(m==n)
 printf("the number are error");
 else
 {
 for(j=m;j>=1;j--) {
 if(m%j==0&&n%j==0)
k=j;
 }
printf(“最大公约数是d%”,k);
for(k=n;k>=n;k++) {
if(k%m==0&&k%n==0) {
printf("最小公倍数是%d",k);
break;}
 }
}
 }
因为是在手机上回复,比较麻烦,所以就在楼主的程序上修改,等在电脑上再回复一个改进版的程序。
#4
取名字2015-05-13 00:15
改进的程序:
#include    <stdio.h>
void main(void)
{
    int m,n,a,b,temp;
    scanf("%d%d",&m,&n);
    if(m<n)
    {
        temp=m;
        m=n;
        n=temp;
    }
    a=m;
    b=n;
    while(b!=0)
    {
        temp=a%b;
        a=b;
        b=temp;
    }
    printf("最大公约数是:%d\n",a);
    printf("最小公倍数是:%d\n",(m*n)/a);
}
1