现在有两个不同的日期,你能告诉我它们之间差几天吗?
输入格式:
有多行数据,每行数据包含6个数字,中间用空格分隔,每3个数字代表一个日期。
输出格式:
对应于输入数据,输出数据有相同的行数,每行表示对应的两个日期相差的天数。
输入样例:
1934 2 4 2047 11 30
2192 10 3 1921 5 8
输出样例:
-41572
99130
#include<bits/stdc++.h>
using namespace std;
int f(int y){
if(y%400==0||y%4==0&&y%100!=0) return 1;//闰年
return 0;
}
int main(){
int y1,y2,m1,m2,d1,d2;
int day[12][2]={{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
while(cin>>y1>>m1>>d1>>y2>>m2>>d2){
int sum=0,flag=1;
if(y1==y2&&m1==m2&&d1==d2){
cout<<0<<endl;
continue;
}
if(y1<y2||y1==y2&&m1<m2||y1==y2&&m1==m2&&d1<d2) flag=0;
else{
int t=y1;y1=y2;y2=t;
t=m1;m1=m2;m2=t;
t=d1;d1=d2;d2=t;
}
if(y1==y2){
if(m1==m2){
if(!flag) cout<<"-";
cout<<d2-d1<<endl;
}
else{
sum+=d2;sum+=(day[m1-1][f(y1)]-d1);
for(int i=m1+1;i<m2;i++){
sum+=day[i-1][f(y1)];
}
if(!flag) cout<<"-";
cout<<sum<<endl;
}
continue;
}
for(int i=y1+1;i<y2;i++){
sum+=365;
if(f(i)) sum++;
}
int t=f(y1);
sum+=(day[m1-1][t]-d1);
for(int i=m1+1;i<=12;i++) sum+=day[i-1][t];
t=f(y2);
for(int i=1;i<m2;i++) sum+=day[i-1][t];
sum+=d2;
if(!flag) cout<<"-";
cout<<sum<<endl;
}
return 0;
}