作者cismjmgoshr (--???--)
看板C_and_CPP
標題Re: [問題] 求gcd和lcm
時間Sun Nov 8 12:14:33 2009
※ 引述《keler897 (職業洗的)》之銘言:
: int gcd(int a,int b,int c)
: {
: int d;
: for(d=a;a%d==0&&b%d==0&&c%d==0;d--)
: return d;
: }
先看一下這段程式碼
for迴圈的結構:for(初始值;結束條件;變數更新)
結束條件那邊通常會放一個邏輯判斷句 (如原PO寫的 a%d==0&&b%d==0&&c%d==0 )
當這個判斷句的條件成立時,迴圈會繼續跑;條件不成立時迴圈會中止
for(d=a;a%d==0&&b%d==0&&c%d==0;d--)
這樣寫的話,這段程式碼會做的事是:
(1)初始化變數d的值,讓它與a相等
(2)判斷 a%d b%d c%d 三個值是不是都等於0。
(3)如果a%d b%d c%d都等於0,則d的值減1,然後回到步驟(2)
如果不是,則跳出迴圈(d的值不變)
這樣剛好和原PO想要做的事相反
另外
for(d=a;a%d==0&&b%d==0&&c%d==0;d--)
return d;
return d;直接接在for迴圈的後面,則"return d;"也會被當成for迴圈裡面的一部份
如果for迴圈裡面沒有要做其他的事的話,後面要加個分號
for(d=a;a%d==0&&b%d==0&&c%d==0;d--);
for(d=a;a%d==0&&b%d==0&&c%d==0;d--)
;
這兩種種寫法都可以 (我個人偏好後者,比較不容易漏看分號)
--
∫work dt = success
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.238.124
→ keler897:感謝大大這麼詳細的回答 我了解了!!! 11/08 12:35
推 VictorTom:其實for中間那個嚴格來說是"繼續跑迴圈的條件", 另外, 11/08 14:59
→ VictorTom:就算是第一輪要跑也會check那個條件, 所以以下這個例子 11/08 14:59
→ VictorTom:for(i=1;i<1;++i); 這個for一次都不會跑.... 11/08 14:59
推 tw00088437:斷 11/08 15:00
→ tw00088437:斷太慢了 Orz 11/08 15:00