主题:求任意多个整数的公倍数
yaozheng
[专家分:28410] 发布于 2002-11-11 22:55:00
#include<stdio.h>
main()
{
int num,i,a[100],d,c;
c=1;
printf("input ji ge zheng shu\n");
scanf("%d",&num);
for(i=0;i<num;i++){
printf("input di %d ge zheng shu\n",i+1);
scanf("%d",&a[i]);
}
d=a[0];
while(c==1){
for(i=0,c=0;i<num;i++){
if(d%a[i]!=0)
{c=1;d++;}
}
}
printf("gong bei shu shi %d",d);
}
--------------------------------------------------------------------------------
2 3 7 8 10 36 的最小公倍数是 2520
回复列表 (共7个回复)
沙发
yangq81 [专家分:0] 发布于 2002-11-15 19:48:00
求最小公倍数可以将两数相乘然后除以其最大公约数.
求最小公倍数函数如下:
#define abs(a) ((a)>0?(a):-(a))
long times(int a, int b)
{
long c=(long)a*b; int tmp;
a=abs(a); b=abs(b);
if(a>b) {tmp=b; b=a; a=tmp;}
//求最大公约数a
while(b%a) {tmp=b; b=a; a=tmp-a;}
return e/a;
}
这以下语句
d=a[0];
while(c==1){
for(i=0,c=0;i<num;i++){
if(d%a[i]!=0)
{c=1;d++;}
}
}
可改为:
d=a[0];
for(i=1; i<num; i++) d=times(d, a[i]);
板凳
yangq81 [专家分:0] 发布于 2002-11-15 19:50:00
return e/a;
应为
return c/a;
3 楼
liminggg1218 [专家分:0] 发布于 2002-11-19 22:26:00
#include<stdio.h>
main()
{
int num,i,a[100],d,c;
c=1;
printf("input ji ge zheng shu\n");
scanf("%d",&num);
for(i=0;i<num;i++){
printf("input di %d ge zheng shu\n",i+1);
scanf("%d",&a[i]);
}
d=a[0];
while(c==1){
for(i=0,c=0;i<num;i++){
if(d%a[i]!=0)
{c=1;d++;}
}
}
printf("gong bei shu shi %d",d);
}
有九个括号呀!!!!!!!!!!!!!!!!!!!!!!
4 楼
611yang [专家分:0] 发布于 2005-04-27 17:32:00
1楼大哥的程序有问题吗?
好象实参和形参类型不对呀
5 楼
lbskln [专家分:1380] 发布于 2005-04-27 19:15:00
楼主厉害,算法已经被我收录了!哈哈,我的算法库里有多了一个成员!
不过我要问一下,负数有最大公约数和最小公倍数吗?
我在计算最大公约数和最小公倍数时凡小于1都要返回错误的!我的做法是不是不正确?
6 楼
lbskln [专家分:1380] 发布于 2005-04-27 19:30:00
楼主可不可以在给一个求多个数的最大公约数的算法?经典的!
7 楼
lbskln [专家分:1380] 发布于 2005-04-27 19:43:00
我将楼主的算法做了一些改动,希望楼主指正:
template <class T>
long GetMulLCM(T a[],int num)
{
int c=1;
if(num<=0)return ERROR;
for(int i=0;i<num;i++)
{
if(a[i]<0)return ERROR;
else if(a[i]==0)return 0;
}
T d=a[0];
while(c==1)
{
for(c=0,int i=0;i<num;i++)
{
if(d%a[i]!=0)
{
c=1;
d++;
}
}
}
return (long)d;
}
我来回复