2 两个日期相差天数

现在有两个不同的日期,你能告诉我它们之间差几天吗?
输入格式:

有多行数据,每行数据包含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;
}
发布了23 篇原创文章 · 获赞 8 · 访问量 1372

猜你喜欢

转载自blog.csdn.net/qq_45550552/article/details/104601061