回 帖 发 新 帖 刷新版面

主题:求最大公约数  我出错了!求高手帮忙

输入两个数,求他们的最大公约数。我写的程序如下:
#include<stdio.h>
void main()
{
    int n,m,max,min,t;
    scanf("%d %d",&n,&m);
    if(n>m) max=n,min=m;
    else max=m,min=n;
    while(t!=0)
    {
    t=max%min;    \使用辗转相除\
    max=min;
    min=t;
     
    }
    printf("它们的最大公约数为%d\n",min);
}
输出不对  程序能运行  高人帮帮我,我刚刚学C  还是一个非常小白!

回复列表 (共20个回复)

沙发

高手们  你们就用我的这个编程思想帮我改一下  让我彻彻底底的明白我错在在哪里了!谢谢了!!!
---------------------------------
===========================================菜鸟在进化~~~~~~~~~谢谢各位支持

板凳


菜鸟路过···
你的循环是以t=0结束的,那么最后,因为你循环体里的赋值语句 “min=t;”,min的值总是0的···

3 楼

把计算的顺序调整一下,把赋值放在求余前面

4 楼

[quote]把计算的顺序调整一下,把赋值放在求余前面[/qu
也不行啊  我输入24 18 输出是2  我输入4 8 输出是-4  不真的是什么原因 
还往高手解答!

5 楼

嗯,我说一下吧···虽然我也是新手
首先,我调试时发现,我输入9和6时,你那个循环里的条件“t>=0”会导致无限循环。这是一点,所以我把它改成了"t>0"。
其次,那个min的问题,我用了一个比较笨的方法(应该还有更好的方法吧),我改成了这样
if(t) min=t;
就是加了一个条件而已。
嗯,我也是新手···一起加油哦,呵呵。

6 楼


新手对新手  能不能把你改的发上来!  我并没有t>0的循环条件啊
我按你的方法改了
还是不行
把你的发上来我对比一下

7 楼



新手对新手  能不能把你改的发上来!  我并没有t>0的循环条件啊
我按你的方法改了
还是不行
把你的发上来我对比一下
  

8 楼

哦,不好意思,我记错了,囧,这是我改过后的
#include<stdio.h>
void main()
{
    int n,m,max,min,t=1;
    scanf("%d %d",&n,&m);
    if(n>m) max=n,min=m;
    else max=m,min=n;
    while(t>0)
    {
        t=max%min;
        max=min;
        if(t) min=t;
    }
    printf("它们的最大公约数为%d\n",min);
}

[em8][em8][em8][em8][em8]

9 楼

#include<stdio.h>
void main()
{
    int n,m,t,temp;
    scanf("%d,%d",&n,&m);
    if(n<m){n=m;m=n;}
    t=n%m;
    do{n=m;
       m=t;
       t=n%m;
      }while(t!=0);
    printf("它们的最大公约数为%d\n",m);
}
t要初始化

10 楼

简化后的程序如下:
#include<stdio.h>
void main()
{
    int n,m,t;
    scanf("%d %d",&n,&m);
    while(m!=0)
    {
    t=n%m;    //使用辗转相除
    n=m;
    m=t;     
    }
    printf("它们的最大公约数为%d\n",n);
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册