2017-10-14 93 views
-1

我在做作業時遇到了麻煩。 我必須做出一個函數,告訴我下一個閏年的時間是n(或n如果是閏年)。在C中查找下一個閏年

我已經解決了最後一部分,但是我在「下一個閏年」部分遇到了問題。我想我必須做一個循環?

這裏是我到目前爲止

int next_leapyear(int n) 
{ 

    if(((n%4==0)&&(n%100!=0))||(n%400==0)) return n; 

    else 
    while(?){ 
     n++; 
    } 

    return n; 
} 

我剛開始學習這種語言,所以,如果你們能保持它的簡單我將不勝感激

+2

'while(/ * n不是閏年* /){n ++; } return n;' –

+0

感謝您的幫助 –

+0

......並且不需要第一個「if ... else」。 –

回答

0

增加n直到你if語句條件是不正確的,所以有兩種方法,你可以把條件放在括號中,這是直接的。

第二個是,運行循環無限次,並把破條件的循環

while(1){ 
     n++; 
if(((n%4==0)&&(n%100!=0))||(n%400==0)) break; 

    } 
+0

我沒有學習'1'在一個循環的類,但我認爲它的邏輯值「真」,所以循環繼續下去,直到如果滿意? (顯然'break'停止循環) 無論如何,這解決了我的問題,非常感謝! –

+0

是的,你說得對。保持學習! –

+0

爲什麼要用always-true條件做一個while循環,然後當你可以使用if語句作爲條件時有一個if-語句來突破它? –

3

的任務可分爲兩個部分內。首先,我們可以檢查一個給定的n是不是一個閏年,可以用下面的函數來完成。

int IsLeapYear(int n) 
{ 
    return (((n%4==0)&&(n%100!=0))||(n%400==0)); 
} 

下,可以使用一個循環,基於上述的功能,增加n,直到它是一個閏年。這可以按照如下進行。

int GetNextLeapYear(int n) 
{ 
    int CurrentYear = n; 
    while(!IsLeapYear(CurrentYear)) 
    { 
     CurrentYear++; 
    } 
    return CurrentYear; 
} 
+1

知道了!但是我的練習要求爲這兩個部分提供單一功能。我從你所說的中學到了很多東西,謝謝 –

+1

@TiagoAraújo你未知的練習可能要求爲這兩個部分提供單一功能,但[post](https://stackoverflow.com/q/46746157/2410359)確實不。這個答案概述了一個明確的解決方案,它是更好的編碼方法。 – chux

0

你增加了一年的想法,並檢查它是否是閏年或不工作,但因爲你必須做很多modulos的這是一個非常昂貴的操作是不是很有效。

其實去尋找下一個正常的閏年,你只需要整年至next multiple of 4,可與任一

year = (year + 3) & ~0x03; 
year = (year | 0x03) + 1; 

實現萬一以後四捨五入它的倍數100然後加4就可以得到正確的年份。所以實現可能是這樣的

int next_leapyear(int n) 
{ 
    n = (n + 3) & ~3; 
    if (n % 100 == 0) n += 4; 
    return n; 
}