某年某月的某一天

某年某月的某一天
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 58(31 users) Total Accepted: 32(26 users) Rating: Special Judge: No
Description

  因为大雄考了有史以来也是唯一一次的100分,叮当猫答应带大雄去未来看一看。但是笨蛋大雄把时光机的时间调错了,结果回到了古代。叮当猫的时光机是这么用的:输入一个数n,时光机就会去到n天后或者是n天前,然后选择是往未来还是回古代。但是大雄只记得输入n天,忘了选择是去未来了。

  现在告诉你大雄输入的天数,请你算出本来他们打算去的是未来哪一天以及现在在古代的哪一天。以今天,即2013年9月7号为当前天数,即算出2013年9月7号的n天前和n天后是几年几月几日。

Input

  第一行输入一个数T,表示有T组样例。

  接下来T行是T组数据,每组数据包含一个正整数n(n<=100000)。

Output

  请计算并输出大雄本来打算去的未来的某年某月某日,以及最后去了的古代的某年某月某日。

  输出日期格式为YYYY/MM/DD,两个日期中间用一个空格隔开,每组数据占一行,详情参考simple output。

Sample Input

3

18

26

31

Sample Output

2013/09/25 2013/08/20

2013/10/03 2013/08/12

2013/10/08 2013/08/07

Author
曾卓敏

做麻烦了

我的代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
bool check(int year)
{
if((year%4==0&&year%100!=0)||(year%400==0))
{
return true;
}
return false;
}
int year,month,day;
void up(int n)
{
year=2013;
month=9;
day=7;
if(n>=24)
{
n-=24;
month=10;
day=1;
}
while(n>0)
{
if(month==2)
{
if(check(year))
{
if(n>=29)
{
n-=29;
month++;
day=1;
}
else
{
day+=n;
n=0;

}
}
else
{
if(n>=28)
{
n-=28;
month++;
day=1;
}
else
{
day+=n;
n=0;

}
}
}
else if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
{
if(n>=31)
{
n-=31;
month++;
if(month>12)
{
year++;
month=1;
}
day=1;
}
else
{
day+=n;
n=0;
}
}
else
{
if(n>=30)
{
n-=30;
month++;
day=1;
}
else
{
day+=n;
n=0;
}
}
}
}
void down(int n)
{
year=2013;
month=9;
day=7;
if(n>=7)
{
n-=7;
day=31;
month--;
}
while(n>0)
{
if(month==3)
{
if(n>=31)
{
if(check(year))
{
n-=31;
month--;
day=29;
}
else
{
n-=31;
month--;
day=28;
}
}
else
{
day-=n;
n=0;
}
}
else if((month==1)||(month==8))
{
if(n>=31)
{
month--;
if(month==0)
{
year--;
month=12;
}
day=31;
n-=31;
}
else
{
day-=n;
n=0;
}
}
else if((month==5)||(month==7)||(month==10)||(month==12))
{
if(n>=31)
{
month--;
day=30;
n-=31;
}
else
{
day-=n;
n=0;
}
}
else if(month==2)
{
if(check(year))
{
if(n>=29)
{
n-=29;
day=31;
month--;
}
else
{
day-=n;
n=0;
}
}
else
{
if(n>=28)
{
n-=28;
day=31;
month--;
}
else
{
day-=n;
n=0;
}
}
}
else
{
if(n>=30)
{
n-=30;
month--;
day=31;
}
else
{
day-=n;
n=0;
}
}
}
}

int main()
{
int T;
while(~scanf("%d",&T))
{
while(T--)
{
int n;
scanf("%d",&n);
up(n);
printf("%04d/%02d/%02d ",year,month,day);
down(n);
printf("%04d/%02d/%02d ",year,month,day);
}
}
return 0;
}

原文地址:https://www.cnblogs.com/beige1315402725/p/4864946.html