| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1316 人关注过本帖
标题:最小公倍数无法求出,求解惑
只看楼主 加入收藏
njdxsheng
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2012-6-10
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:12 
最小公倍数无法求出,求解惑
写了一个求最大公约数和最小公倍数的程序,可是最小公倍数的程序不能得出最终结果,每次都只是输出x,y中的最大值,请哪位大大解惑下,谢谢~!
#include<stdio.h>
#include<cstdlib>
void main()
{
void yue(int x,int y);
void bei(int x,int y);
int x,y;
printf("请输入两个整数"  );
scanf("%d,%d",&x,&y);
yue(x,y);
bei(x,y);
system("pause");
}
void  yue(int x,int y)
{
    int i,n;
    for(i=1;i<=(x<y?x:y);i++)
        if((x%i==0)&&(y%i==0))n=i;
        printf("最大公约数为%d\n",n);
}
void  bei(int x,int y)
{
    int c;
    c=x>y?x:y;
    while(c%x!=0,c%y!=0)c++;
        printf("最小公倍数为%d\n",c); /无法正确求出最小公倍数/
}
搜索更多相关主题的帖子: include 最小公倍数 void system 
2012-06-12 21:16
多多关照
Rank: 2
等 级:论坛游民
帖 子:42
专家分:51
注 册:2009-8-22
收藏
得分:0 
while(c%x!=0,c%y!=0)c++;这句话存在明显的问题
2012-06-12 22:07
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:4 
在这里我用了求最大公约数的经典算法Euclid的算法:
#include <stdio.h>

int gcd(int m, int n);
int scd(int m, int n);

int main(void)
{
    int m, n;
    printf("enter two number:");
    scanf("%d %d", &m, &n);
    printf("the GCD:%d\n", gcd(m, n));
    printf("the SCD:%d\n", scd(m, n));
   
    return 0;
}

int gcd(int m, int n)
{
    int i;
   
    while(n!=0){
        
        i=m%n;
        m=n;
        n=i;
    }
    return m;
}

int scd(int m, int n)
{
    int i;
    for(i=2;i<=(m<n?m:n);i++){
        if(m%i==0 && n%i==0){
            break;
        }
    }
    return i;
}
希望能帮到你!

Edsger Dijkstra:算法+数据结构=程序
2012-06-12 23:17
smile康师傅
Rank: 2
等 级:论坛游民
帖 子:34
专家分:53
注 册:2012-6-10
收藏
得分:0 
scanf("%d,%d",&x,&y);有问题,应该为scanf(""%d%d"",&x,&y);scanf的接收要严格地按照格式来啊
2012-06-12 23:33
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 3楼 雪狼MJ
呵呵,知道欧几里德算法求最大公约数怎么会不知道它也可以求最小公倍数?

最小公倍数叫least common multiple(缩写LCM),是不scd

LCM(a, b) = a * b / GCD(a, b);

重剑无锋,大巧不工
2012-06-13 00:12
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:0 
回复 5楼 beyondyf
呵呵,我英语不好嘛,就用s(small)cd来代替了。。。。我还不知道也可以用它算最小公倍数呢,多谢指教,现在我知道了!

Edsger Dijkstra:算法+数据结构=程序
2012-06-13 08:28
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:0 
对不起啊,我前面的代码犯了个错误,我把最小公约数当成了最小公倍数,失误失误。。。。。。
正确的代码:

#include <stdio.h>

int gcd(int m, int n);

int main(void)
{
    int m, n, g;
    printf("enter two number:");
    scanf("%d %d", &m, &n);
    g=gcd(m, n);
    printf("the GCD:%d\n", gcd(m, n));
    printf("the LCM:%d\n", m*n/gcd(m, n));
   
    return 0;
}

int gcd(int m, int n)
{
    int i;
   
    while(n!=0){
        
        i=m%n;
        m=n;
        n=i;
    }
    return m;
}

Edsger Dijkstra:算法+数据结构=程序
2012-06-13 08:47
秦元龙
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-6-13
收藏
得分:0 
回复 楼主 njdxsheng
求最小公倍数,要先求最大公约数,一个不错的方法是用辗转相减法,举个例子,60和24的最大公约数,就用60-24=36,比较24和36的大小,再用大的数减小的数,36-24=12,同上24>=12,24-12=12,最后12-12=0,那么12就是最大约数了,最小公倍数即为60*24/12=120.这个实现应该行容易。
2012-06-13 08:48
妖刀重生
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2012-5-5
收藏
得分:0 
# include <stdio.h>

int main(void)
{
    extern void gcd(int , int , int *);
    extern void lcm(int , int , int *, int *);
    int m, n, a, b, * p, * q;
    p = &a;
    q = &b;

    printf("请输入 m 和 n 的值:");
    scanf("%d %d", &m, &n);

    gcd(m, n, p);
    lcm(m, n, p, q);

    printf("最大公约数为:%d\n", a);
    printf("最小公倍数为:%d\n", b);

    return 0;
}

void lcm(int x, int y, int * p, int * q)
{
    *q = x*y / *p;
    return ;
}

void gcd(int x, int y, int * p)
{
    int t, r;
    if (x < y)
    {
        t = x;
        x = y;
        y = t;
    }

    while (r != 0)
    {
        r = x%y;
        x = y;
        y = r;
    }

    *p = x;

    return ;
}
2012-06-13 12:10
贞茜
Rank: 1
等 级:新手上路
帖 子:5
专家分:1
注 册:2012-6-13
收藏
得分:0 
有点看不懂,呵呵,不好意思,帮不到你
2012-06-13 12:18
快速回复:最小公倍数无法求出,求解惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021257 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved