T155144 日期间隔

T155144 日期间隔


题目描述:
在这里插入图片描述
思路:
①:连接体信息,采用结构体的方式进行存储年月日。
②:这种求日期的问题有一个很直接的思路,就是令较小的日期不断加1天,直到这个日期等于较大的日期为止,就能统计出答案了。
③:具体处理时,如果当加了一天后天数d等于这个月份m的天数加1,那么就令月份m加1,同时令天数d重置为1(即把日期变为下一月的一号)。如果当月份m等于13了,那么就令年份y加1,同时令月份重置为1(即把日期变为下一年的一月份)。
④:由于输入的两个日期不一定第一个输入的日期就是最小的,因此还要判断两者的大小,若第一个输入的日期比第二个输入的日期大,交换他们就好了。
⑤:值得注意的是还得判断年份是否是闰年。不妨设置一个二维数组int month[13][2]。用来存放每个月的天数,其中第二维为0时代表着不是闰年(即平年),为1时代表着是闰年。
AC代码:

#include<bits/stdc++.h>
using namespace std;
int month[13][2]={{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},
				  {31,31},{30,30},{31,31}};
struct node{
	int y,m,d;
}t1,t2,a,b;

bool isrun(int year)
{
	return ((year%4==0&&year%100!=0)||(year%400==0));
}
int main()
{
	scanf("%4d/%2d/%2d",&t1.y,&t1.m,&t1.d);
	scanf("%4d/%2d/%2d",&t2.y,&t2.m,&t2.d);
	int a1=t1.y*10000+t1.m*100+t1.d;
	int b1=t2.y*10000+t2.m*100+t2.d;
	if(a1>b1){
		swap(t1,t2);
	}
	int ans=1;
	while(t1.y<t2.y||t1.m<t2.m||t1.d<t2.d){
		t1.d++;
		if(t1.d==month[t1.m][isrun(t1.y)]+1){
			t1.m++;
			t1.d=1;
		}
		if(t1.m==13){
			t1.y++;
			t1.m=1;
		}
		ans++;
	} 
	printf("%d",ans);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值