C语言:输入两个整数m和n,求它们的最大公约数和最小公倍数。

a)在运行时,输入的值m〉n,观察结果是否正确。
b)再输入时,使m<n观察结果是否正确。
c)修改程序,不论m和n为何值(包括)负整数,都能得到正确结果。

//以下是最大公约数的例子,必须用C语言来编写,C++就不用了;

两个非零整数的最大公约数就是它们绝对值的最大公约数,最小公倍数是它们的积除以最大公约数
#include <stdio.h>
#include <math.h>
int f(int a,int b)
{
int r;
r = a % b;
while(r != 0)
{
a = b;
b = r;
r = a % b;
}
return b;
}
int main()
{
int a, b, r1;
scanf("%d %d", &a, &b);
a=abs(a);
b=abs(b);
r1 = f(a, b);
printf("%d\n",r1); //输出最大公约数
printf("%d\n",a*b/r1); //输出最小公倍数
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-18
#include<stdio.h>
main(){
long int a,b,d;
long int m,n,i,j;
double c,h;
c=1;
scanf("%ld%ld",&m,&n);
if(m>=n){
b=m;
d=n;
}else{b=n;d=m;}
for(i=1;i<=(b/2);i++){
if((m%i==0) && (n%i==0) && (m%n!=0) && (n%m!=0)){
c=c*i;
}else{if(b%d==0){c=d;}}

}
h=(m*n/c);
printf("%.0lf %.0lf",c,h);
return 0;
}
第2个回答  2013-11-18
#include <stdio.h>

int GCD(int a,int b)
{
int r;
r = a % b;
while(r != 0)
{
a = b;
b = r;
r = a % b;
}
return b;
}
int main()
{
int a, b, gcd;
scanf("%i%i", &a, &b);
gcd = GCD(a, b);
printf("gcd = %i",gcd);
return 0;
}