```c
int main()
{
int a = 0;
int b = 0;
int i = 0;
int mid = 0;
printf_s("你要求最大公约数的两个数是:");
scanf_s("%d%d", &a, &b);
if (b > a)
{
mid = b;
b = a;
a = mid;
}
for (i = a;i < a;i--)
{
if (i % a == 0 && i % b == 0)
break;
}
printf_s("这两个数的最大公约数是:%d\n", i);
return 0;
}
for (i = a;i < a;i--)
这是啥条件啊
第一下就过不了啊,i=a,又要求i<a,怎么可能呢?for循环根本不执行啊
然后i%a和i%b也是错的
改为
for(i=a;i>=1;i--)
{
if (a % i == 0 && b % i == 0)
break;
}
搞错了,是求最大公约数
你的i应该从小值b开始往小减,而不是a;
应该是a和b除以i取余为0,而不是i除以a和b。
int main()
{
int a = 0;
int b = 0;
int i = 0;
int mid = 0;
printf_s("你要求最大公约数的两个数是:");
scanf_s("%d%d", &a, &b);
if (b > a)
{
mid = b;
b = a;
a = mid;
}
for (i = b;i >0;i--)
{
if (a % i == 0 && b % i == 0)
break;
}
printf_s("这两个数的最大公约数是:%d\n", i);
return 0;
}
逻辑有问题: 最大公约数一定是小于等于两个数中的最小的那个数的,然后两个数里边不能有,0,因为没有意义。因此还需要增加一个判断,输入的数中不能有0.这个判断我就不给你加了 ,给你改了一下逻辑,只要输入不为0,应该能正常输出的
```c
int main()
{
int a = 0;
int b = 0;
int i = 0;
int mid = 0;
printf_s("你要求最大公约数的两个数是:");
scanf_s("%d%d", &a, &b);
if (b > a)
{
mid = b;
b = a;
a = mid;
}
for (i = b;i < =b;i--)
{
if (a % i== 0 && b % i == 0)
break;
}
printf_s("这两个数的最大公约数是:%d\n", i);
return 0;
}