C语言代码bug不知道怎么改

为什么输入负数他还是算出来了,求解答谢谢

```c
#include<stdio.h>
//编写最大公约数GCD函数
/*********Begin*********/
    long long int GCD(long long int m,long long int n){
        long long int i,sum=1;
        if(m<n){
            m+=n;
            n=m-n;
            m=m-n;
        }
        for(i=n;i>=1;i--){
            if(m%i==0&&n%i==0){
            sum*=i;
            break;
            }
        }
        return sum;
    }
/*********End**********/ 
//编写最小公倍数LCM函数
/*********Begin*********/
    long long int LCM(long long int m,long long int n){
        long long int k;
        k=GCD(m,n);
        return (m/k)*(n/k)*k;
    }
/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
    long long int m,n,a,b;
    scanf("%ld %ld",&m,&n);
    if(m>=0&&n>=0){
    a=GCD(m,n);
    b=LCM(m,n);
    printf("%ld %ld",a,b);
    } 
    else{
        printf("Input Error");
    }
    /*********End**********/ 
    return 0;
}         

```

把 %ld 改成 %lld。

格式化用%lld

img

#include <stdio.h>
//编写最大公约数GCD函数
/*********Begin*********/
long long int GCD(long long int m, long long int n)
{
    long long int i, sum = 1;
    if (m < n)
    {
        m += n;
        n = m - n;
        m = m - n;
    }
    for (i = n; i >= 1; i--)
    {
        if (m % i == 0 && n % i == 0)
        {
            sum *= i;
            break;
        }
    }
    return sum;
}
/*********End**********/
//编写最小公倍数LCM函数
/*********Begin*********/
long long int LCM(long long int m, long long int n)
{
    long long int k;
    k = GCD(m, n);
    return (m / k) * (n / k) * k;
}
/*********End**********/
int main(void)
{
    /*********Begin*********/
    long long int m, n, a, b;
    scanf("%lld %lld", &m, &n);
    if (m >= 0 && n >= 0)
    {
        a = GCD(m, n);
        b = LCM(m, n);
        printf("%lld %lld", a, b);
    }
    else
    {
        printf("Input Error");
    }
    /*********End**********/
    return 0;
}