a263

輸入說明 :

輸入有多筆測資,每筆測資有兩行,每行有三個整數依序是年、月、日。輸入以 EOF 作為結束,題目保證不會有不符合的測資出現。

輸出說明 :

輸出兩個日期差幾天。

下面這是網路上的解答來源,寫得非常乾淨

它的寫法是 輸入2011 10 19

就去算從西元第一天到2011 10 19總共有幾天

先判斷2011是不是閏年,再來算西元第一天到2010 12 31 總共有幾天

總共會有

2010*365+(西元第0年到西元2010年有幾年是閏年)(year/4 - year/100 + year/400)

然後加上2011年1月1號到10 19 號有幾天

int monthday[13] = {0,0,31,59,90,120,151,181,212,243,273,304,334};

這個陣列monthday[1]=1月到1月有幾天 monthday[2]=1月到2月有幾天 monthday[3]=1月到3月有幾天 . . .

算出兩個輸入之後再把他們相減,取絕對值,

?叫做條件運算子 表示假如前面那個條件成立的話 回傳冒號前面的值,不成立的話,回傳後面的值

#include <stdio.h>

int monthday[13] = {0,0,31,59,90,120,151,181,212,243,273,304,334};

int CountDay(int year, int month, int day)
{
    int isleap;
    int leaps;

    isleap = (year%4==0 && year%100!=0) || year%400==0;

    year--;
    leaps = year/4 - year/100 + year/400;

    return (year*365+leaps) + (monthday[month]+((month>2)?isleap:0)) + day;
}

int main ()
{
    int i;
    int y1,m1,d1;
    int y2,m2,d2;
    int         gap;

    while(scanf("%d %d %d",&y1,&m1,&d1)==3)
    {
        scanf("%d %d %d",&y2,&m2,&d2);

           gap= CountDay(y1,m1,d1) - CountDay(y2,m2,d2);

        printf("%d\n",gap>-1?gap:-gap);
    }

    return 0;
}