| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 874 人关注过本帖
标题:这个函数怎么不行,?求最大公约数
只看楼主 加入收藏
wandison
Rank: 1
等 级:新手上路
帖 子:50
专家分:4
注 册:2006-11-7
收藏
 问题点数:0 回复次数:8 
这个函数怎么不行,?求最大公约数

函数求最大公约数,怎么不行啊?
#include<stdio.h>
int gcd(int,int);
void main()
{
int a, b , i;

printf("input two ");
scanf("%d%d",&a, &b);
i=gcd(a,b);
printf("i=%d",i);
}
int gcd(int a, int b)
{
int hold;
do
{
if(a>=b)
{
hold=b;
b=a%b;
a=hold;
}
else
{
hold=a;
a=b%a;
b=hold;
}
}while(a==0||b==0);
return 2;
}


搜索更多相关主题的帖子: int 函数 最大公约数 gcd 
2006-12-07 12:52
wyb19850616
Rank: 6Rank: 6
来 自:大连
等 级:贵宾
威 望:29
帖 子:3172
专家分:126
注 册:2006-10-3
收藏
得分:0 
我 写了 个求 最大公约数和 最小公倍数的 代码 你可以参考一下 因为 写的 匆忙 没有注释 抱歉了
#include "stdio.h"
void main()
{
int hcf(int ,int);
int lcd(int,int ,int);
int u,v,h,l;
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("HCF=%d\n",h);
l=lcd(u,v,h);
printf("LCD=%d\n",l);
int hcf(int u,int v)
{
int t,r;
if(v>u)
{
t=u;u=v;v=t;
}
while ((r=u%v)!=0) {u=v;v=r;}
return v;
}
int lcd(int u,int v,int h)
{
return(u*v/h);
}




多年以后我就会很老了  腰间那柄玄铁剑也换成了木剑 我拖着它浪迹天涯    我一生打败了无数江湖豪客    然而   却打不败逝者如斯的时光和对你无尽的思念
2006-12-07 13:05
zzymoon
Rank: 1
等 级:新手上路
帖 子:82
专家分:1
注 册:2006-9-19
收藏
得分:0 
以下是引用wandison在2006-12-7 12:52:18的发言:

函数求最大公约数,怎么不行啊?
#include<stdio.h>
int gcd(int,int);
void main()
{
int a, b , i;

printf("input two ");
scanf("%d%d",&a, &b);
i=gcd(a,b);
printf("i=%d",i);
}
int gcd(int a, int b)
{
int hold;
do
{
if(a>=b)
{
hold=b;
b=a%b; /*第二次循环的时候,这里的a和b相等(即使是else中的 a=b%a; 也会是如此)*/
a=hold;
}
else
{
hold=a;
a=b%a;
b=hold;
}
}while(a==0||b==0);
return 2;
}


算法有问题,这个根本就不是求最大公约数,再说gcd只会返回2


程序天下,C的亡魂。 偶``````来自地狱
2006-12-07 14:50
zzymoon
Rank: 1
等 级:新手上路
帖 子:82
专家分:1
注 册:2006-9-19
收藏
得分:0 
以下是引用wyb19850616在2006-12-7 13:05:19的发言:
我 写了 个求 最大公约数和 最小公倍数的 代码 你可以参考一下 因为 写的 匆忙 没有注释 抱歉了
#include "stdio.h"
void main()
{
int hcf(int ,int);
int lcd(int,int ,int);
int u,v,h,l;
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("HCF=%d\n",h);
l=lcd(u,v,h);
printf("LCD=%d\n",l);
int hcf(int u,int v)
{
int t,r;
if(v>u) /*可以不要,一次循环之后,v>u的话会自动换位*/
{
t=u;u=v;v=t;
}
while ((r=u%v)!=0) {u=v;v=r;}
return v;
}
int lcd(int u,int v,int h)/*用内联可能更好*/
{
return(u*v/h);
}





程序天下,C的亡魂。 偶``````来自地狱
2006-12-07 14:58
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
其实算法的核心就是

小的等于大数减小数,如果两数相等则输出,否则继续循环

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-08 18:59
guzhou
Rank: 1
等 级:新手上路
威 望:1
帖 子:247
专家分:0
注 册:2006-11-4
收藏
得分:0 
以下是引用卧龙孔明在2006-12-8 18:59:55的发言:
其实算法的核心就是

小的等于大数减小数,如果两数相等则输出,否则继续循环

即辗转相除法


2006-12-08 19:16
regulate
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-11-3
收藏
得分:0 

main()
{
int a,b,i,min;
scanf("%d,%d",&a,&b);
min=(a<b)?a:b;
for(i=min;i>1;i--)
if(a%i==0 && b%i==0)
break;
printf("%d\n",i);
}

只是对题目做的一种做法

2006-12-08 19:49
剑风曲
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-11-16
收藏
得分:0 
#include<stdio.h>
int cmp(int a,int b){
if(b==0)return a;
else return cmp(b,a%b);
}
int main(){
int x,y,k;
scanf("%d%d",&x,&y);
k=cmp(x,y);
printf("%d\n",k);//最大公约数
printf("%d",x*y/k);//最小公倍数
}

我一般喜欢这么写的~~~看得比较舒服
2006-12-09 07:52
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 

#include<stdio.h>
int gcd(int,int);
void main()
{
int a, b , i;

printf("input two ");
scanf("%d%d",&a, &b);
i=gcd(a,b);
printf("i=%d",i);
}
int gcd(int a, int b)
{
if(a*b==0){return 0;}
if(a<0){a=-a;}
if(b<0){b=-a;}
while(a!=b)
{
if(a>b)
{a-=b;}
else
{b-=a;}
}
return a;
}

-4与8 的最大公约数是4吧


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-12-09 14:18
快速回复:这个函数怎么不行,?求最大公约数
数据加载中...
 
   



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

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