C语言习题 求键盘输入的两个正整数的最大公约数和最小公倍数

如题所述

#include<stdio.h>

#include<stdlib.h>

intHCF(intx,inty);//定义最大公约数函数

intLCM(intx,inty);//定义最小公倍数函数

intmain()

{

inta,b;

printf("Pleaseenter2numbers:");//输入两个整数

scanf("%d%d",&a,&b);

printf("HCF=%d,LCM=%d\n",HCF(a,b),LCM(a,b));//输出最大公约数和最小公倍数

system("pause");

return0;

}

//最大公约数函数(利用欧几里得算法

intHCF(intx,inty)

{

for(intz=x%y;z!=0;x=y,y=z,z=x%y);

returny;

}

//最小公倍数函数

intLCM(intx,inty)

{

return(x*y)/HCF(x,y);

}

扩展资料

处理数组n个元素的最大公约数

#include<stdio.h>

#include<stdlib.h>

intHCF(intx,inty);

intmain()

{

intn[4],i,temp;

for(i=0;i<4;i++){

printf("PleaseenterNo.%dnumber:",i+1);

scanf("%d",&n[i]);

}

for(i=0,temp=n[0];i<4;i++)

temp=HCF(temp,n[i]);

printf("HCF=%d\n",temp);

system("pause");

return0;

}

intHCF(intx,inty)

{

for(intz=x%y;z!=0;x=y,y=z,z=x%y);

returny;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-04
#include <stdio.h>

int main()
{
    int a,b,i,min,max;    //a、b存储读入的两个正整数

    scanf("%d%d",&a,&b);

    max = 1;
    for(i=2;i<=a;i++)
    {
        if(a%i==0 && b%i==0)
            max = i;
    }

    min = a*b;
    for(i=a*b-1;i>=a;i--)
    {
        if(i%a==0 && i%b==0)
            min = i;
    }

    printf("%d\t%d\n",max,min);    //先后输出最大公因数和最小公倍数

    return 0;
}

这个算法适合输入比较小的情况,不是很高效。

本回答被提问者和网友采纳
第2个回答  2015-12-04
代码如下
#include <stdio.h>
int main()
{
 int  p,r,n,m,temp;
 scanf("%d",&n);
 scanf("%d',&m);
 if (n<m)
  {
   temp=n;
   n=m;
   m=temp;
  }
 p=n*m;
 while(m!=0)
  {
   r=n%m;
   n=m;
   m=r;
  }
 printf("它们的最大公约数为:%d\n",n);
 printf("它们的最小公约数为:%d\n",p/n);
 return 0;
}

相似回答