| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 671 人关注过本帖
标题:最大公约数函数.
只看楼主 加入收藏
songweiwen
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-2-19
收藏
 问题点数:0 回复次数:7 
最大公约数函数.
我只能一步步的减一(或加一)以得到约数,请问各位有没有更好的算法可以更快的求出最大公约数????
submultiple(int a,int b)
{int i;
if(a*b==0) printf("I cann't make sure!"); /*要是有零就不知道怎样处理了!这里是否也要加一个"return()"?????????*/
else {if(abs(a)>abs(b)) i=b; /*又要处理正负数的问题*/
else i=a;
for(;i>=1;i--) /*我只能一步步的减一以得到约数*/
if(a%i==0&&b%i==0){return(i);break;}
for(;i<=-1;i++)
if(a%(-i)==0&&b%(-i)==0){return(-i);break;}
}
}

[此贴子已经被作者于2006-4-12 15:16:43编辑过]

搜索更多相关主题的帖子: 函数 最大公约数 
2006-04-12 15:15
ヤ順祺冄繎ヤ
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:3032
专家分:0
注 册:2005-11-9
收藏
得分:0 

可以用輾轉相除法。
以前有人髮過,自己搜索一下。

2006-04-12 15:18
疯狂VC
Rank: 1
等 级:新手上路
威 望:1
帖 子:375
专家分:0
注 册:2006-3-29
收藏
得分:0 
http://www.bc-cn.net/bbs/dispbbs.asp?BoardID=5&ID=8346&replyID=39040&skin=1
这是我在论坛上搜到的一个帖子!

你自己看看吧!

2006-04-12 16:23
icy_fruit
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-2-22
收藏
得分:0 

#include<stdio.h>

void main()

{

int p,r,m,n,temp;

printf("请输入两个数字:");

scanf("%d,%d",&n,&m);

if(n<m) //把大的数放在n中,小数放在m中

{

temp=n;

n=m;

m=temp;

}

p=m*n;

while(m!=0) //求最大公约数

{

r=n%m;

n=m;

m=r;

}

printf("它们的最大公约数为%d\n",n);

printf("它们的最小公倍数为%d\n",p/n);

}
前天刚做过嘿嘿


2006-04-12 20:30
luo113927
Rank: 1
等 级:新手上路
帖 子:173
专家分:0
注 册:2006-3-15
收藏
得分:0 
2006-04-12 23:53
songweiwen
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-2-19
收藏
得分:0 
请大家看看这个程序,当我输入1111 2222时,输出是The greatest common divisor of 1111 and 0 is:2222
和The lease common multiple of 1111 and 0 is:2222.究竟那里出错了??????
main()
{long a,b;
long submultiple(long,long);
long multiple(long,long);
printf("Please input two numbers:");
scanf("%d %d",&a,&b);
if(a>0&&b>0){
printf("\nThe greatest common divisor of %d and %d is:%d",a,b,submultiple(a,b));
printf("\nThe lease common multiple of %d and %d is:%d\n",a,b,multiple(a,b));
}
else printf("I cann't make sure!"); /*要是有零或负数就不知道怎样处理了!*/
}
long submultiple(long max,long min)
{long i;
if(max>min) i=min;
else {i=max;max=min;min=i;}
for(;;)
{if(i=max%min) {max=min;min=i;}
else {return(min);break;}}
}
long multiple(long a,long b)
{
return(a*b/submultiple(a,b));}

Finding!!!
2006-04-14 07:39
ヤ順祺冄繎ヤ
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:3032
专家分:0
注 册:2005-11-9
收藏
得分:0 
以下是引用songweiwen在2006-4-14 7:39:00的发言:
请大家看看这个程序,当我输入1111 2222时,输出是The greatest common divisor of 1111 and 0 is:2222
和The lease common multiple of 1111 and 0 is:2222.究竟那里出错了??????
main()
{long a,b;
long submultiple(long,long);
long multiple(long,long);
printf("Please input two numbers:");
scanf("%d %d",&a,&b);
if(a>0&&b>0){
printf("\nThe greatest common divisor of %d and %d is:%d",a,b,submultiple(a,b));
printf("\nThe lease common multiple of %d and %d is:%d\n",a,b,multiple(a,b));
}
else printf("I cann't make sure!"); /*要是有零或负数就不知道怎样处理了!*/
}
long submultiple(long max,long min)
{long i;
if(max>min) i=min;
else {i=max;max=min;min=i;}
for(;;)
{if(i=max%min) {max=min;min=i;}
else {return(min);break;}}
}
long multiple(long a,long b)
{
return(a*b/submultiple(a,b));}

程序我沒怎麽看,只看到這個問題的錯誤,
你定義的是long型,而你輸出與輸入怎麽還是%d呢?
應該用%ld,你先試一下不行再發貼。!

2006-04-14 11:31
songweiwen
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-2-19
收藏
得分:0 

非常感谢!!!


Finding!!!
2006-04-14 14:37
快速回复:最大公约数函数.
数据加载中...
 
   



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

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