为什么输入负数他还是算出来了,求解答谢谢
```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
#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;
}