一道不会的c语言程序设计

2、在主函数中输入两个自然数(如输入的是非自然数,则重新输入),调用子函数int fun (int, int), fun返回这两个数的最大公约数,在主函数中输出。

辗转相除法, 又名欧几里德算法。你去百度百科上查找。

#include <stdio.h>

int fun2(int n1,int n2) //群举法
{
    int s=(n1>n2)?n2:n1;
    int res=1;
    for(int i=1;i<=s;i++)
        if(n1%i==0 && n2%i==0)
            res=i;

    return res;
}

int fun(int n1,int n2)  //辗转相除法
{   int x=n2;
    int mod=n1%x;
    while(mod)
    {
        n1=x;
        x=mod;
        mod=n1%x;
    }

    return x;
}

int main()
{
    int n1,n2;

    while(1)
    {
        printf("输入2个自然数:\n");
        scanf("%d%d",&n1,&n2);
        
        if(n1>=0 && n2 >=0)
            break;
        printf("输入错误,请重新输入:\n");
    }
    int res=fun(n1,n2);
    printf("%d\n",res);

    return 0;
}