| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2333 人关注过本帖
标题:[讨论]用辗转相除法用比较交换两个数的大小吗
只看楼主 加入收藏
wh2000292
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-3-19
收藏
 问题点数:0 回复次数:7 
[讨论]用辗转相除法用比较交换两个数的大小吗

使用辗转相除法都求最大公约数时总是把两个数中较大的放在前边和另一个数求余,但由于有一次粗心,并没有比较交换两个数的值,把较小的数放在前面求余,发现也在正确的求出结果,使用辗转相除法一定要比较交换两个数的大小吗
int gongyue(int x,int y)
{int temp;
while(y!=0)
{temp=x%y;
x=y;
y=temp;
}
return(x);
}
main()
{int x,y;
scanf("%d%d",&x,&y);
printf("gongyue is %d\n",gongyue(x,y));
}


搜索更多相关主题的帖子: 除法 辗转 
2007-06-07 10:42
wh2000292
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-3-19
收藏
得分:0 
回复:(wh2000292)[讨论]用辗转相除法用比较交换两个...

举两个数试试就明白了,比方说15和24
对如下程序
while(temp=a%b)
{a=b;
b=temp;
}
另a=15,b=24
则temp=15%24=15
a=b=24;b=temp=15;
结果和24%15是一样的,由此可见完全没有事前比较两个数的大小,刻意把大的数安排在前的意义


2007-06-07 20:48
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

你这样是可以的,并且一个好的想法,非常巧妙的算法.
可以这样分析:
(1)
当比较的两个数传入是小大的顺序.
一般情况下,都要进行判断这步.而在你的算法就可直接进行运算.
(2)
当比较的两个数传入是大小的顺序.
在你的算法中的第一次循环就启到了把大小顺序变换成小大顺序.就相当于
一般情况下的判断这步.

由此,可见你的算法的优点.
希望大家,能发扬这个算法.


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-06-07 21:33
千金散尽
Rank: 1
等 级:新手上路
威 望:2
帖 子:55
专家分:0
注 册:2007-5-23
收藏
得分:0 
经过试验确实不管是x%y或者y%x其结果都是一样的。所以没有必要区分大小

才明白但已经晚了,希望结识想创业的朋友。
2007-06-07 21:36
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
本人建议将
while(y!=0)
{temp=x%y;
x=y;
y=temp;
}

改成:
do
{
temp=x%y;
x=y;
y=temp;
}while(y!=0);
可以减少一次:y!=0;的比较.
因为比较的两个数不可能出现0.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-06-07 21:49
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 

#include<stdio.h>
#include<math.h>
int i;
void main()
{ int hcf (int p,int r);
int hcd (int p,int r);
int j, n,m,temp;
printf("intput m and n\n");
scanf("%d,%d",&m,&n);
if(m<n)
{temp=m;
m=n;
n=temp;
}
i=hcf (m,n);
j=hcd (m,n);
printf("theH.C.F of m and n is :%d",i);
printf("the H.C.D of m and n is :%d",j);

}
int hcf (int p, int r)
{ int x,y;
if( p%r==0)
y=r;
else
{if (x==p%r!=0)
{p=r;
r=x;
}

y=r;
}
return y;
}

int hcd (int p,int r)
{int y;
y=p*r/i;
return y;
}
这样怎么有错误啊


方寸之内,剖天下; 方坛之内,析自我;
2007-06-08 23:13
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
完全没有比较大小,
比如3和5
求一次余数之后,自己就变成5和3了

2007-06-09 09:33
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 

我知道什么地方错了,
if (x==p%r!=0);!的级别最高,所以要加括号啊
还有输入时要加逗号;


方寸之内,剖天下; 方坛之内,析自我;
2007-06-09 18:23
快速回复:[讨论]用辗转相除法用比较交换两个数的大小吗
数据加载中...
 
   



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

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