回 帖 发 新 帖 刷新版面

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

输入两个数,求他们的最大公约数。我写的程序如下:
#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个回复)

11 楼


我用你的试了一下  还是不行  输入 24 18  输出却是-4??????????

12 楼


试了一下   可以  在你手里怎么变成那么简单啊
可以不互换???????要是计算机把不会把小的对大的求余?比如5%15????????  第一次建你这么用   !不过很好

13 楼

[quote]哦,不好意思,我记错了,囧,这是我改过后的
#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][/quote]

if(n>m) max=n,min=m;
    else max=m,min=n;这里的两个逗号的问题……
我先指出这点,小细节一定要注意,我刚刚学c的时候就在这里吃了很大的亏。
待会给你改程序

14 楼

已经有人改了,我就不献丑了

15 楼


嗯,13楼指教的是,我会注意的

16 楼


十楼程序改得很好,楼主分应该给他高一点的······像我改的,虽然可以用,但是还是有缺陷,也不够简洁···[em8]

17 楼

[quote]简化后的程序如下:
#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);
}[/quote]

好一点的算法书如果提到了求最大公约数的方法都会这么做的;经典算法!

18 楼

#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",max);
}

我献丑改的内容。。。最后PRINTF那边只要是MAX就行了,其他小细节我按我的习惯改了改。。。楼主算法上可以再研究下~

19 楼


我先把我的思想给你写出来,你的我等下再看
#include <stdio.h>
main()
{
     int a,b,t,c,i;
     printf ("请输入两个整数:");
     scanf ("%d,%d",&a,&b);
     if (b>a)
     {
         t=a;a=b;b=t;
     }
     for (i=1;;i++)
     {
         c=(a*i)%b;
         if(c==0) break;
     }
     printf ("两个数的最大公约数为:%d\n",a*i);
}

20 楼

不好意思,我看成最大公倍数了![em10][em10][em10][em10][em10]

我来回复

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