回 帖 发 新 帖 刷新版面

主题:[讨论]两种 c 语言版求最大公约数方法的比较~~

我在参考书上看到的求最大公约数的思路是这样的:


#include "stdio.h"
#include "conio.h"
void main()
{   
    int m,n,i,temp;
    printf("Input two number:\n");
    scanf("%d%d",&m,&n);
    

//交换两个数,使得循环时 i 的值由较小的数开始递减

    if(m > n)
    {
        temp = m;
        m = n;
        n = temp;
    }

//循环开始,i 的值由较小的数开始递减,直到出现符合条件的值,i 的取值范围是 i > 0


    for(i = m;i > 0;i --)
        if(0 == m % i && 0 == n % i)
        {
            printf("the max is :%d\n",i);
            break;
        }
    getch();
}



我自己看的有关求最大公约数是使用的辗转相除法,如下:


#include "stdio.h"
#include "conio.h"

void main()
{   
    int m,n,r,temp;
    printf("Input two number:\n");
    scanf("%d%d",&m,&n);

//交换两个数,使得被除数总是大于除数

    if(m < n)
    {
        temp = m;
        m = n;
        n = temp;
    }


//循环开始,辗转相除法:

    for(r = m % n;r > 0;)
    {
        m = n;
        n = r;
        r = m % n;
    }
    printf("the max gongyueshu is :%d\n",n);
}


这两种方法哪一种比较好?

回复列表 (共3个回复)

沙发

第二种方法比较好 此方法很容易实现的

板凳

如果从实现的时间上来说,哪种方法更高效一点?是不是也是第二种?我们还没学算法设计,不知道这要从哪一方面来看

3 楼


[em9]
你的程序有点问题啊,好像void该改成int
在加个程序暂停的system("pause");
         return 0;
不知道是不?
            小游侠

我来回复

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