25:計算兩個日期之間的天數
- 總時間限制:
- 1000ms
- 記憶體限制:
- 65536kB
- 描述
-
給定兩個日期,計算相差的天數。比如2010-1-1和2010-1-3相差2天。
- 輸入
- 共兩行:
第一行包含三個整數startYear,startMonth,startDay,分別是起始年、月、日。
第二行包含三個整數endYear,endMonth,endDay,分別是結束年、月、日。
相鄰兩個整數之間用單個空格隔開。
年份範圍在1~3000。保證日期正確且結束日期不早於起始日期。 - 輸出
- 輸出一個整數,即是兩個日期相差的天數。
- 樣例輸入
-
2008 1 1 2009 1 1
- 樣例輸出
-
366
- 提示
- 閏年被定義為能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它們不是閏年。閏年的2月份有29天。
-
1 #include<iostream> 2 using namespace std; 3 int bgyear,bgmonth,bgday; 4 int enyear,enmonth,enday; 5 int month[21]={0,31,28,31,30,31,30,31,31,30,31,30,31};//非閏年 6 int rmonth[21]={0,31,29,31,30,31,30,31,31,30,31,30,31};//閏年 7 int flag=1; 8 int tot=0; 9 int main() 10 { 11 cin>>bgyear>>bgmonth>>bgday; 12 cin>>enyear>>enmonth>>enday; 13 for(int i=bgyear;i<=enyear+1;i++)//尋找年數上的差異 14 { 15 if((i%4==0&&i%100!=0)||(i%400==0)) 16 { 17 for(int j=1;j<=12;j++) 18 { 19 if(i==bgyear&&j<bgmonth) 20 continue;//尋找開始月份 21 for(int k=1;k<=rmonth[j];k++) 22 { 23 if(i==enyear&&j==enmonth&&k==enday) 24 { 25 cout<<tot; 26 return 0; 27 } 28 if(k<bgday&&flag==1) 29 continue; 30 else 31 { 32 flag=0; 33 tot++; 34 } 35 36 } 37 38 } 39 }//閏年 40 else 41 { 42 43 for(int j=1;j<=12;j++) 44 { 45 if(i==bgyear&&j<bgmonth) 46 continue;//尋找開始月份 47 for(int k=1;k<=month[j];k++) 48 { 49 if(i==enyear&&j==enmonth&&k==enday) 50 { 51 cout<<tot; 52 return 0; 53 } 54 if(k<bgday&&flag==1) 55 continue; 56 else 57 { 58 flag=0; 59 tot++; 60 } 61 62 } 63 64 } 65 }//非閏年 66 } 67 cout<<tot; 68 return 0; 69 }