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;
}