#include <stdio.h>
#include <stdio.h>
int main()
{
int i=0,j=0,k=0,m=0;
int sum[]={0};
int arr[]={0};
int a=0,b=0;
scanf("%d%d",&a,&b);
for(i=1;i<=a;i++)
{
if(a%i==0)
{
sum[j]=i;
j++;
}
}
for(k=0;k<=j;k++)
{
if(b%sum[k]==0)
{
arr[m]=sum[k];
m++;
}
}
printf("%d\n",arr[m]);
return 0;
}
m表示有多少个公约数,最大公约数是最后一个,下标是m-1,不是m。m的话就越界访问了
printf("%d\n",arr[m-1]);
首先在a,b里面找一个最小值出来,然后用最小值进行循环,取模都为0就终止循环。