C语言找公约数

来源:百度知道 编辑:UC知道 时间:2024/06/14 09:03:41
#include<stdio.h>
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int m,n,t,i=0,j=0,sum=0,s=0;
int a[100],b[100];
scanf("%d%d",&m,&n);
for(t=1;t<m;t++)
{
if(m%t==0)
{
a[i]=t;
i++;
}
}
for(t=1;t<n;t++)
{
if(n%t==0)
{
b[j]=t;
j++;
}
}
for(t=0;t<i;t++)
{
printf("%d ",a[t]);
}
printf("\n");
for(t=0;t<j;t++)
{
printf("%d ",a[t]);
}
printf("\n");
}
return 0;
}

为什么n的公约数都是错的

这样改就可以了
#include<stdio.h>
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int m,n,t,i=0,j=0,sum=0,s=0;
int a[100],b[100],c[100];
scanf("%d%d",&m,&n);
for(t=1;t<=m;t++) //公约数可以是它本身,所以应该是t<=m
{
if(m%t==0)
{
a[i]=t;
i++;
}
}
for(t=1;t<=n;t++)
{
if(n%t==0)
{
b[j]=t;
j++;
}
}
for(t=0;t<i;t++) //这就是求两个数公约数的方法,你以前的想法是错误的。
for(int k=0; k<j; k++)
{
if(a[t]==b[k])
{
c[s]=a[t];
s++;
}

}
for(t=0; t<s; t++)
printf("%d\n",c[t]);
}
return 0;
}