hdu 4515 小Q系列故事——世界上最遥远的距离

本文介绍了一个C++程序,用于实现日期的向前和向后推算功能。该程序通过判断平年与闰年的规则来处理不同月份的天数变化,并能够正确处理跨越到上一年或下一年的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接: hdu 4515

注意点:时间回到以前时,此时要得到day,不能直接取前一个月份的天书,而是要先得到月份,因为月份可能会回到去年的12月。

#include<iostream>
#include<cstdio>
using namespace std;
int cy = 2013,cm = 3,cd = 24;
int da[2][13]={
	{0,31,28,31,30,31,30,31,31,30,31,30,31},
	{0,31,29,31,30,31,30,31,31,30,31,30,31},
};
int isLeap(int y)
{
	int  ret = 0;
	if(y%4==0&&y%100!=0||y%400==0) ret = 1;
	return ret;
}
void preDate(int n)
{
	int y = cy,m = cm,d = cd;
	int f = isLeap(y);
	while(n--)
	{
		d--;
		if(d==0) 
		{
			//d = da[f][--m]
			m--;
		    if(m==0) y--,m=12,f = isLeap(y);
		    d = da[f][m]; //注意点
		}
	}
	printf("%04d/%02d/%02d\n",y,m,d);
}
void laterDate(int n)
{
	int y = cy,m = cm,d = cd;
	int f = isLeap(y);
	while(n--)
	{
		d++;
		if(d>da[f][m])
		{
			m++;
			if(m > 12) y++,m = 1,f = isLeap(y);
			d = 1;
		} 
	}
	printf("%04d/%02d/%02d ",y,m,d);
}
int main()
{
	int t,n;
	cin>>t;
	while(t--)
	{
		cin>>n;
		laterDate(n);
		preDate(n);

	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值