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;
}