题目大意:给定当前时期2013.3.24(坑爹啊,比赛那天是3.23啊),求解往前退d天的日期,和往后进d天的日期。水题,就是要注意~
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int yy,mm,dd;
int leap(int y)
{
if((y%4==0 && y%100!=0) || y%400==0) return 1;
return 0;
}
void init()
{
yy = 2013;
mm = 3;
dd = 23;
}
void solve_next(int n)
{
init();
while(n--)
{
dd++;
//这里切不可以写作mon[2] += leap(yy);
//不然会累加2月的天数啊
mon[2] = 28 + leap(yy);
if(dd > mon[mm])
{
dd = 1; mm++;
if(mm>12){ mm = 1;yy++;}
}
}
printf("%04d/%02d/%02d",yy,mm,dd);
}
void solve_pre(int n)
{
init();
while(n--)
{
dd--;
mon[2] = 28 + leap(yy);
if(dd == 0)
{
mm--;
if(mm<1){ mm = 12;yy--;}
dd = mon[mm];
}
}
printf("%04d/%02d/%02d",yy,mm,dd);
}
int main()
{
int Tcas;
scanf("%d",&Tcas);
while(Tcas--)
{
int n;
scanf("%d",&n);
solve_next(n+1);
printf(" ");
solve_pre(n-1);
puts("");
}
system("pause");
return 0;
}