作者ShortestPath (Dijkstra)
看板C_and_CPP
标题Re: [问题] c语言求gcd的副程式
时间Mon Nov 30 03:23:35 2009
回圈版万年标准解答, 不会写也能抄
int gcd(int a, int b)
{
if (b) while((a%=b) && (b%=a));
return a+b;
}
※ 引述《gaiger (hallowed be my name)》之铭言:
: 为何不用回圈写?
: int gcd(int a, int b)
: {
: int c;
: int gcdnumber;
: int maxIter;
: maxIter = (int)log(double((a>b? a : b) ) + 1;
: int bigger, smaller;
: if(a > b){
: bigger = a;
: smaller = b;
: }
: else
: {
: bigger = b;
: smaller = a;
: }/*if a> b*/
: int temp;
: for(int i = 0; i< maxIter; i++){
: c = bigger%smaller;
: if(c == 0){
: gcdnumber = smaller;
: break;
: }
: else
: {
: if(smaller == 1){
: gcdnumber = 1;
: break;
: }/*if(smaller == 1)*/
: temp = smaller;
: smaller = bigger - smaller;
: bigger = smaller;
: }/*if c == 0*/
: }/*for maxiter*/
: return gcdnumber;
: }/* gcd */
: 大多数书都是讲递回
: 但递回真的缺点不少:较慢,浪费较多计义体
: 且新手会被搞晕
: ※ 引述《badbadook ( 嗨浪)》之铭言:
: : 1 int gcd(u,v)
: : 2 int u,v;
: : 3 {
: : 4 int t;
: : 5 do
: : 6 {
: : 7 if(u<v)
: : 8 {t=u;u=v;v=t;};
: : 9
: : 10 u=u-v;
: : 11 }
: : 12 while (u!=v);
: : 13
: : 14 return(u);
: : 15 }
: : 请问7-10行的意义为何?
--
WOW三宝 多龙 大总统 短路径
WOW贴文大师 疯法
WOW翻译机 A-N-
S-E-R (好像会买一送一)
智XD的正妹 joinchi
WOWBox 艾佛列名言: wowbox 的主机我到现在都还没看过呢.....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.175.35
1F:推 a96374177:何不 __gcd(a,b) 11/30 04:08
2F:推 ledia:要练习 gcd 的运作方式, 不然用自然语言输入法最快 XD 11/30 09:10
3F:→ ledia:「那个谁,帮我写个会算最大公因数的程式出来」 11/30 09:11
4F:推 truesword:好强大的指令 11/30 20:19