| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 696 人关注过本帖
标题:求助,有关求最大公约数和最小公倍数的
只看楼主 加入收藏
y657268373
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-5-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
求助,有关求最大公约数和最小公倍数的
#include <stdio.h>
void main()
{
  int m,n,t1;
  int gcd(int x,int y);
  printf("input two integer numbers:\n");
  scanf("%d,%d",&a,&b);
  t1=gcd(m,n);
  printf("The highest common divisor is %d\n",t1);
  printf("The lowest common multiple is %d\n",m*n/t1);
}

int gcd(int x,int y)
{
   if(x%y==0)
    return y;
   else
    return gcd(y,x%y);
}


其中在定义gcd时,为什么不用比较x y大小,就直接用if语句了??
搜索更多相关主题的帖子: 最小公倍数 multiple highest 
2013-05-16 22:54
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:3 
如果x%y==0,那么y能被x整除,因此最大公倍数是y。如果x%y!=0,那么让y和x除以y所得的余数(如果x小于y时还是x)接着求,高中数学好像学过这个。
2013-05-17 00:25
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:3 
程序代码:
#include <stdio.h>
int gcd(int x,int y);
int main(void)
{
  int m,n,t1,a,b;
  printf("input two integer numbers:\n");
  scanf("%d%d",&m,&n);  //注意此处!!
  t1=gcd(m,n);
  printf("The highest common divisor is %d\n",t1);
  printf("The lowest common multiple is %d\n",m*n/t1);
}

int gcd(int x,int y)
{
    int t, a;
    if(x<y)
    {
        t=x;x=y;y=t;
    }
   while(a!=0)
   {
       a=x%y;
       x=y;
       y=a;
   }
   return x;
}

你的代码有问题!这是我的代码!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-05-17 07:09
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
以下是引用y657268373在2013-5-16 22:54:28的发言:

其中在定义gcd时,为什么不用比较x y大小,就直接用if语句了??


   假如输入:3 7
   执行语句: while(a!=0)
             {
                a=x%y;
                 x=y;
                 y=a;
               }
执行第一次:a=3,x=7,y=3;
x和y互换完成!!!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-05-17 07:24
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:3 
这个要比较的,然后进行辗转相除。
 if(x<y)
     {
         t=x;x=y;y=t;
     }

Maybe
2013-05-17 09:45
bccn新
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:57
专家分:144
注 册:2013-5-10
收藏
得分:3 
支持4楼!
2013-05-17 11:02
diqidyunpan
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2013-3-28
收藏
得分:3 
VC++ 6.0不能执行啊,编译完成,输入两个数字之后,现实内存错误。囧
2013-05-17 11:18
孤寂的小菜
Rank: 2
等 级:论坛游民
帖 子:26
专家分:45
注 册:2013-4-30
收藏
得分:3 
如果x<y,x%y值为x,转到else分支,也就是执行gcd(y,x),这样就会前面数大后面数小了。
如果x>y,x%y值不为0,也会转到else分支,执行gcd(y,x%y),也就是辗转相除,后面就不多说了。
2013-05-17 19:10
yyqd2013
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:35
专家分:154
注 册:2013-5-8
收藏
得分:3 
这个完全自己可以试一下!代码精髓就在这里,如果x<y,那么执行第一次gcd(x,y),相当于交换x,y的位置,变成gcd(y,x)!!!
特殊情况特殊处理,何不举个实例,如gcd(3,7) -》gcd(7,3)。
2013-05-19 01:07
快速回复:求助,有关求最大公约数和最小公倍数的
数据加载中...
 
   



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

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