这样为啥求不出最小公倍数

这个为啥求不出最小公因数啊

```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;
}

关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:编程练习——求最小公倍数