Re: [問題] c語言求gcd的副程式

看板C_and_CPP作者 (Dijkstra)時間14年前 (2009/11/30 03:23), 編輯推噓3(301)
留言4則, 3人參與, 最新討論串2/2 (看更多)
迴圈版萬年標準解答, 不會寫也能抄 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

11/30 04:08, , 1F
何不 __gcd(a,b)
11/30 04:08, 1F

11/30 09:10, , 2F
要練習 gcd 的運作方式, 不然用自然語言輸入法最快 XD
11/30 09:10, 2F

11/30 09:11, , 3F
「那個誰,幫我寫個會算最大公因數的程式出來」
11/30 09:11, 3F

11/30 20:19, , 4F
好強大的指令
11/30 20:19, 4F
文章代碼(AID): #1B4ieveu (C_and_CPP)
文章代碼(AID): #1B4ieveu (C_and_CPP)