#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b;
printf("请输入两个数:\n");
scanf("%d%d", &a, &b);
int n = a;
if (n > b)
n = b;
for (int i = n; i >= 1; i--)
{
if (a%i == 0 && b%i == 0)
{
printf("最大公约数为:%d\n",i);
break;
}
else printf("没有公约数\n");
break;
}
system("pause");
return 0;
}
方法2.更相减损法
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, r;
printf("请输入两个数:\n");
scanf_s("%d%d", &a, &b);
if (a<b)
{
r = a; a = b; b = r;
}
r = a - b;
while (r != 0)
{
if (r<b)
{
a = b; b = r;
}
else a = r;
r = a - b;
}
printf("最大公因数为:%d\n", b);
system("pause");
return 0;
}
方法3.辗转相除法
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, r;
printf("请输入两个数:\n");
scanf("%d%d", &a, &b);
if (a < b)
{
r = a; a = b; b = r;
}
r = a%b; //若余数r=0,则b为最大公约数
while (r != 0)
{
a = b; b = r; r = a%b;
}
printf("最大公约数为: %d\n", b);
system("pause");
return 0;
}
方法4.while循环
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, r;
printf("请输入两个数:\n");
scanf("%d%d", &a, &b);
while (a%b != 0)
{
r = a%b;
a = b;
b = r;
}
printf("最大公因数为:%d\n", b);
system("pause");
return 0;
}