回 帖 发 新 帖 刷新版面

主题:求任意多个整数的公倍数

#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个回复)

沙发

求最小公倍数可以将两数相乘然后除以其最大公约数.
求最小公倍数函数如下:
#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]);

板凳

return e/a;
应为
return c/a;

3 楼

 
#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 楼

1楼大哥的程序有问题吗?
好象实参和形参类型不对呀

5 楼

楼主厉害,算法已经被我收录了!哈哈,我的算法库里有多了一个成员!
不过我要问一下,负数有最大公约数和最小公倍数吗?
我在计算最大公约数和最小公倍数时凡小于1都要返回错误的!我的做法是不是不正确?

6 楼

楼主可不可以在给一个求多个数的最大公约数的算法?经典的!

7 楼

我将楼主的算法做了一些改动,希望楼主指正:
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;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册