时间限制:1秒 内存限制:128M
题目描述
给定两个日期,计算相差的天数。比如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天。
#include<iostream>
#include<algorithm>
using namespace std;
long long s;
int a[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31},sY,sM,sD,eY,eM,eD;
int main() {
cin>>sY>>sM>>sD;
cin>>eY>>eM>>eD;
for(int i=sY+1; i<eY; i++) {
if(i%4==0&&i%100!=0||i%400==0) s+=366;
else s+=365;
}
if(sY%4==0&&sY%100!=0||sY%400==0) a[2]=29;
else a[2]=28;
if(sY==eY&&sM!=eM){
for(int i=sM+1;i<=eM-1;i++) s+=a[i];
s+=a[sM]-sD;
s+=eD;
}
else if(sY!=eY){
s+=a[sM]-sD;
for(int i=sM+1;i<=12;i++) s+=a[i];
s+=eD;
for(int i=1;i<eM;i++) s+=a[i];
}
else if(sY==eY&&sM==eM) s+=eD-sD;
cout<<s;
}