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