//给定两个数,求这两个数的最大公约数
#include<stdio.h>
int main()
{
int a=0;
int b = 0;
scanf_s("%d %d", &a, &b);
int min = (a < b) ? a : b;//找出a b中的最小值
int m = min;
for (; m > 0; m--)//假设最小值就是最大公约数,如果不能整除那么就减一
{
if(a%m==0&&b%m==0)
{
break;//直到找到可以整除的数跳出循环
}
}
printf("%d", m);
return 0;
}
但是这个方法不够高效,我们可以用辗转相除法来求解,例如24和18,我们用24%18,得到6,再用24和18中的最小值18%6,得0,那么6就是我要求的最大公因数,代码如下
#include<stdio.h>
int main()
{
int a=0;
int b = 0;
scanf_s("%d %d", &a, &b);
int n = 0;
while (n=a%b)//这里不需要判断a,b的大小,如果a小于b经过一次循环后会互换
{
a = b;
b = n;
}
printf("%d\n", b);
return 0;
}