题目是求最大公约数,编写了一下,只能求出所有的公约数,如何优化能在结果中只显现最大的那一项呢,谢谢求解
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a, b;
int min;
int i = 1;
scanf("%d, %d", &a, &b);
if (a > b)
{
min = b;
}
else
{
min = a;
}
for (i = 1; i <= min; i++)
{
if (a%i == 0 && b%i == 0)
{
printf("公约数:%d", i);
}
}
定义一个 int max=-1;
公约数存到数组 a[i ]
遍历数组
#include<stdio.h>
int main()
{
int m, n, temp, i;
printf("Input m & n:");
scanf("%d%d", &m, &n);
if(m<n) /*比较大小,使得m中存储大数,n中存储小数*/
{ /*交换m和n的值*/
temp=m;
m=n;
n=temp;
}
for(i=n; i>0; i--) /*按照从大到小的顺序寻找满足条件的自然数*/
if(m%i==0 && n%i==0)
{/*输出满足条件的自然数并结束循环*/
printf("The GCD of %d and %d is: %d\n", m, n, i);
break;
}
return 0;
}
如果 max<a[i];则把 a[i] 赋值给max
即 max=a[i]
循环结束 max即为最大公约数
你这个题求公约数方法看着也不太好
int a, b;
int min;
int i = 1;
int max= 0;
scanf("%d, %d", &a, &b);
if(a > b)
{
min = b;
}
else
{
min = a;
}
for(i = 1; i <= min; i++)
{
if(a%i == 0 && b%i == 0)
{
if(max < i)
{
max = i;
}
printf("公约数:%d", i);
}
}
printf("最大公约数:%d", max);
采用降序循环,得到第一个就用break退出循环。
#include<stdio.h>
int main()
{
int a, b;
int i, min;
scanf("%d,%d", &a, &b);
min = a>b ? b : a;
for (i = min; i > 0; i--)
{
if ((a%i == 0) && (b%i == 0))
{
printf("公约数:%d", i);
break;
}
}
return 0;
}