主题:[讨论]求助!C语言编写,求任意两数最大公约数和最小公倍数!
			
 cq1988124
				 [专家分:30]  发布于 2007-12-29 10:01:00							
			输入任意两个数,要求输出两数的 最大公约数和最小公倍数!
回复者必加分~
						
					 
		
			
回复列表 (共22个回复)
		
								
				11 楼
				
					
fqsljz520 [专家分:900]  发布于 2008-01-04 20:43:00				
				最小公倍数
#include <iostream>
using namespace std;
void main()
{
    int x,y,z;
    cout<<"Please enter x,y:";
    cin>>x>>y;
    if(x>y)
        z=x;
    else
        z=y;
    while(!((z%x==0)&&(z%y==0)))
    {
        z++;
    }
    cout<<z<<endl;
}
							 
						
				12 楼
				
					
diaoxue [专家分:600]  发布于 2008-01-04 22:42:00				
				离散数学里有算法
大概就是五楼的吧
							 
						
				13 楼
				
					
强强 [专家分:4740]  发布于 2008-01-04 22:47:00				
				#include<stdio.h>
int main()
{
    int m,n,t;
    scanf("%d,%d",&m,&n);
    while(n%m!=0)
    {
        t=n%m;
        n=m;
        m=t;
    }
    printf("%d\n",t);
    getchar();
    return 0;
}
求两数最大公约数,两数之积除以最大公约数是最小公倍数
							 
						
				14 楼
				
					
ox987 [专家分:30]  发布于 2008-04-11 17:42:00				
				给你个简单的:
#include "stdio.h"
void main()
{
    int r,m,n,t,p;
    scanf("%d%d",&m,&n);
    if(m>n)
    {
        t=m;
        m=n;
        n=t;
    }
    p=m*n;
    while(m!=0)
    {
        r=n%m;
        n=m;
        m=r;
    }
    printf("zui da gong yue shu shi:%d\n",n);
    printf("zui xiao gong bei shu shi:%d\n",p/n);
}
							 
						
				15 楼
				
					
gxg1213 [专家分:0]  发布于 2008-07-22 10:05:00				
				略看了下8楼程序,程序是比较易懂,但是指出最简单的缺陷,若求两较大的数,要得调用多少次内存空间 ,至少得用register定下 
最好定义声明一函数,分解质因数,供求你的max(),min()调用
							 
						
				16 楼
				
					
xiaolin204 [专家分:0]  发布于 2008-07-22 20:18:00				
				[quote]给LZ个函数调用的代码   这些题都是不难的 希望LZ多想想
#include <stdio.h>
int max(int x,int y);
int min(int m,int n);
int main(void)
{
    int a,b,max_1=0,min_1=0;
    printf("请输入两个正整数:");
    scanf("%d %d,",&a,&b);
    max_1=max(a,b);
    min_1=min(a,b);
    printf("最大公约数是%d\n最小公倍数是%d",max_1,min_1);
    return 0;
}
int I,J;
int max(int x,int y)
{
    int t,l=0;
    if(y>x)
    {
        t=x;
        x=y;
        y=t;
    }
    for(I=1;I<=y;I++)
        if((x%I==0)&&(y%I==0))
    l=I;
    return l;
}
int min(int m,int n)
{
    int t,p=0;
    if(n>m)
    {
        t=m;
        m=n;
        n=t;
    }
    for(J=m;J<=m*n;J++)
        if((J%m==0)&&(J%n==0))
        {
            p=J;
            break;
        }
        return p;
}
还有个普通的代码
#include <stdio.h>
int main(void)
{
    int m,n,i,j,t,max=0,min=0;
    printf("请输入任意两个正整数:");
    scanf("%d %d",&m,&n);
    if(m>n)
    {
        t=m;
        n=t;
        m=n;
    }
    for(i=1;i<=n;i++)
    {
        if((m%i==0)&&(n%i==0))
        max=i;
    }
    for(j=n;j<=n*m;j++)
    {
        if((j%m==0)&&(j%n==0))
        {
            min=j;
            break;
        }
    }
    printf("最大公约数是%d\n最小公倍数是%d",max,min);
    return 0;
}
[/quote]
你的普通代码是错误的!!!
							 
						
				17 楼
				
					
pclab [专家分:30]  发布于 2008-07-23 18:06:00				
				给个简单的
#include<stdio.h>
void main()
{ int x,y,a,b,z;
  printf("请输入2个数:\n");
  scanf("%d%d",&a,&b);
  if(a<b) 
  { z=a;a=b;b=z;}
    x=a;y=b;
    while(y!=0) /*用辗除法,直到b为0为止*/
    {
    z=x%y;
    x=y;
    y=z;
    }
    printf("最大公约数:%d\n",x);
    printf("最小公倍数:%d\n",a*b/x);
}
							 
						
				18 楼
				
					
啄木鸟 [专家分:200]  发布于 2008-07-24 15:05:00				
				看来不少人回复阿,其实楼主自己看看书肯定能写出来的,这个是学习C语言的一个很基础的算法问题了,这边的答案基本上都是辗转相除法做的,我这边也给你一段代码吧,是用递归方法做的,也是以前在书上看到的,希望楼主以后自己多思考,多练习
////////以下代码可以求的两个数的最小公倍数和最大公约数
#include <stdio.h>
int GetMaxGys(int m,int n)
{
  if (m==n)
     return m;
  else if (m>n)
     GetMaxGys(m-n,n);
  else
     GetMaxGys(n-m,m);
}
void main()
{
  int a,b;
  int maxgys,mingbs;//最大公约数和最小公倍数
  printf("%s\n","请输入两个数:");
  scanf("%d%d",&a,&b);
  maxgys=GetMaxGys(a,b);
  mingbs=a*b/maxgys; //求最小公倍数
  printf("%s","这两个数的最大公约数为:");
  printf("%d\n",maxgys);
  printf("%s","这两个数的最小公倍数为:");
  printf("%d\n",mingbs);
}
							 
						
				19 楼
				
					
zhangyu8090 [专家分:0]  发布于 2010-10-12 13:21:00				
				
求任意两数的最大公约数:
#include <stdio.h>
main()
{
    int m,n,i,t,max=0;
    printf("请输入任意两个正整数:");
    scanf("%d %d",&m,&n);
    if(m<n)
    {
      t=m;
      m=n;
      n=t;
    }
    for(i=1;i<=n;i++)
    {
        if((m%i==0)&&(n%i==0))
        max=i;
    }
    printf("最大公约数是%d\n",max);
}
							 
						
				20 楼
				
					
haierok2003 [专家分:460]  发布于 2010-10-13 09:44:00				
				[quote]既然都写了~我也献丑了~
临时写的,但不知道对不对~
还望指正。。。。谢谢~
代码如下:
#include<stdio.h>
void main()
{ 
  int a,b,i,j,max,min;
  scanf("%d%d",&a,&b);
  for(i=a-1,j=b-1;i>0&&j>0;i--,j--)
     {
       if(a%i==0&&b%j==0)
          {
            if(i==j)
            max=i;
          }
  min=(a/max)*(b/max)*max;
printf("最大公约数是:/%d\n",max);
printf("最小公倍数是:/%d\n",min);
}
[/quote]
10楼:你的循环i,j值不等时,i--,j--又怎么有if(i==j)这种情况?!
							 
									
			
我来回复