问题描述:
给定两个日期,计算相差的天数。比如2010-1-1和2010-1-3相差2天。
时间限制:1000
内存限制:65536
输入
共两行: 第一行包含三个整数startYear,startMonth,startDay,分别是起始年、月、日。 第二行包含三个整数endYear,endMonth,endDay,分别是结束年、月、日。 相邻两个整数之间用单个空格隔开。 年份范围在1~3000。保证日期正确且结束日期不早于起始日期。
输出
输出一个整数,即是两个日期相差的天数。
输入样例:
2008 1 1
2009 1 1
样例输出:
366
AC代码:
#include <iostream>
using namespace std;
int main(){
int y1,m1,d1,y2,m2,d2;
int num1[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
int num2[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
cin>>y1>>m1>>d1;
cin>>y2>>m2>>d2;
int dif,sum=0;
dif=y2-y1;//求出年份之间的差值
if(dif>0){//2个日期不是同一年的
for(int i=1;i<dif;i++){
if((y1+i)%4==0&&((y1+i)%100!=0||(y1+i)%400==0)) sum+=366;
else sum+=365;
//cout<<"test";
}
//计算起始年m1月d1日到本年12月31日的天数
if(((y1%4==0&&y1%100!=0)||y1%400==0)){
for(int i=m1+1;i<=12;i++) sum+=num1[i-1];
sum+=num1[m1-1]-d1;
}else{
for(int i=m1+1;i<=12;i++) sum+=num2[i-1];
sum+=num2[m1-1]-d1;
}
//计结束年从1月1日到m2月d2日的距离
if(((y2%4==0&&y2%100!=0)||y2%400==0)){
for(int i=1;i<m2;i++) sum+=num1[i-1];
sum+=d2;
}else{
for(int i=1;i<m2;i++) sum+=num2[i-1];
sum+=d2;
}
}else{//2个日期是同一年的
if(((y1%4==0&&y1%100!=0)||y1%400==0)){
if(m1==m2){ // 2个日期是同一个月的
sum+=d2-d1;
}else{// 2个日期不是同一个月的
for(int i=m1+1;i<=m2-1;i++) sum+=num1[i-1];
sum+=num1[m1-1]-d1+d2;
}
}else{
if(m1==m2){ // 2个日期是同一个月的
sum+=d2-d1;
}else{// 2个日期不是同一个月的
for(int i=m1+1;i<=m2-1;i++) sum+=num2[i-1];
sum+=num2[m1-1]-d1+d2;
}
}
}
cout<<sum<<endl;
}
/*
2000 1 1
2001 12 31
*/