Re: [問題] 求gcd和lcm
※ 引述《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
→
11/08 12:35, , 1F
11/08 12:35, 1F
推
11/08 14:59, , 2F
11/08 14:59, 2F
→
11/08 14:59, , 3F
11/08 14:59, 3F
→
11/08 14:59, , 4F
11/08 14:59, 4F
推
11/08 15:00, , 5F
11/08 15:00, 5F
→
11/08 15:00, , 6F
11/08 15:00, 6F
討論串 (同標題文章)