#include
/*辗转相除法函数*/
int gcd_div(int a,int b)
{
if (b == 0) {
return a;
} else {
return gcd_div(b,a % b);
}
}
/*更相减损法函数*/
int gcd_sub(int a,int b)
{
int ma,mb;
a>b?(ma=a,mb=b):(ma=b,mb=a);
if (mb == 0) {
return ma;
} else {
return gcd_sub(ma-mb,mb);
}
}
int main()
{
int a = 28,b = 21;
printf("最大公约数(减法):(%d %d)%d\n",b,a,gcd_sub(b,a));
printf("最大公约数(除法):(%d %d)%d\n",b,a,gcd_div(a,b));
return 0;
}
#include
#include
void menu()
{/*菜单函数*/
printf("\n\n\n\n\n\n\t\t---------------------------------------\n\n");
printf("\t\t 1:辗转相除法\n\t\t 2:更相减损法\n\t\t 3:退出");
printf("\n\n\t\t---------------------------------------\n\n");
}
int zhanzhuan(int m,int n)
{/*辗转相除法函数*/
int temp;
if(m
temp=m;
m=n;
n=temp;
}
while(n!=0)
{
temp=m%n;
m=n;
n=temp;
}
return m;
}
int gengxiang(int m,int n)
{/*更相减损法函数*/
int result=0;
int temp;
if(m
temp=m;
m=n;
n=temp;
}
result=m-n;
while(n!=result)
{
if(n>result){m=n;n=result;}
else {m=result;}
result=m-n;
}
return result;
}
int main()
{
int m,n;
int result;
int choice;
while(1)
{
system("cls");
menu();
scanf("%d",&choice);
if(choice==1)
{
system("cls");/*调用DOS的cls清屏命令*/
printf("请输入两个正整数:\n");
scanf("%d%d",&m,&n);
result=zhanzhuan(m,n);
printf("%d和%d的最大公约数为:%d\n",m,n,result);
printf("继续吗?(y/n)\n");
getchar();
scanf("%c",&choice);
if(choice=='y'||choice=='Y')
continue;
else break;
}
else if(choice==2)
{
system("cls");/*调用DOS的cls清屏命令*/
printf("请输入两个正整数:\n");
scanf("%d%d",&m,&n);
result=gengxiang(m,n);
printf("%d和%d的最大公约数为:%d\n",m,n,result);
printf("继续吗?(y/n)\n");
getchar();
scanf("%c",&choice);
if(choice=='y'||choice=='Y')
continue;
else break;
}
else if(choice==3)break;
else printf("输入错误,请重新选择!\n");
}
printf("谢谢使用,再见!\n");
system("pause");
}