25:計算兩個日期之間的天數
描述
給定兩個日期,計算相差的天數。比如2010-1-1和2010-1-3相差2天。
輸入
共兩行:
第一行包含三個整數startYear,startMonth,startDay,分別是起始年、月、日。
第二行包含三個整數endYear,endMonth,endDay,分別是結束年、月、日。
相鄰兩個整數之間用單個空格隔開。
年份范圍在1~3000。保證日期正確且結束日期不早於起始日期。
輸出
輸出一個整數,即是兩個日期相差的天數。
樣例輸入
2008 1 1
2009 1 1
樣例輸出
366
代碼
#include<bits/stdc++.h>
using namespace std;
bool isR(int year);
int main()
{
int sYear,sMonth,sDay;
int eYear,eMonth,eDay;
cin >> sYear >> sMonth >> sDay;
cin >> eYear >> eMonth >> eDay;
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
int ans = 0;
if(sYear==eYear)
{
if(isR(sYear))
a[1]=29;
if(sMonth==eMonth)
ans=eDay-sDay;
else{
ans+=(a[sMonth-1]-sDay);
for(int i=sMonth;i<eMonth-1;i++)
ans+=a[i];
ans+=eDay;
}
cout << ans << endl;
}
else{
if(isR(sYear))
a[1]=29;
ans+=(a[sMonth-1]-sDay);
for(int i=sMonth;i<12;i++)
ans+=a[i];
for(int j=sYear+1;j<eYear;j++)
{
if(isR(j))
ans+=366;
else
ans+=365;
}
a[1]=28;
//再加月份
if(isR(eYear))
a[1]=29;
for(int k=0;k<eMonth-1;k++)
ans+=a[k];
ans+=eDay;
cout << ans << endl;
}
return 0;
}
bool isR(int year)
{
if(year%4==0 && year%100!=0 || year%400==0)
return true;
return false;
}