主题:[讨论]求助!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)这种情况?!
我来回复