求解用函数计算 输入2个数 ,求这两个数的最大公约数和最小公倍数,我想知道我的代码有哪些没完善,刚学函数,有些不太懂

我想知道我的代码有哪些没完善,刚学函数,有些不太懂,不用函数会做,但是用函数就不明白了


#include<stdio.h>
int fun(int x,int y){

int z=0,i=0,s=0;
z=x<y?x:y;
for(i=1;i<=x;i++)
{
if(x%i==0&&y%i==0)
s=i;}
return fun(x,x*y/s);
}
main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",fun(a,b));

}

建议一边运行一边调试。

如果函数fun当中的s是你所求的最大公因数那么fun的返回值就是s。

此外注意main的格式,建议前面加上int并在最后return 0

 

怎么可能?不用函数会,用函数就不会了?不就是把代码稍微挪一挪位置吗?
你这个错误应该是return那里吧,不应该返回s的值吗,s就是最大公约数,你这样不成了无限递归了吗

#include <stdio.h>

// 辗转法求最大公约数
int gcd(int a, int b)
{
    int r = a % b;
    while (r != 0)
    {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}

// 公式:最小公倍数=两数乘积/最大公约数
int  lcm(int a, int b)
{
    return a * b / gcd(a, b);
}

int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("最大公约数: %d\n", gcd(a, b));
    printf("最小公倍数: %d\n", lcm(a, b));
    return 0;
}