18:Tomorrow never knows?
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
甲壳虫的《A day in the life》和《Tomorrow never knows》脍炙人口,如果告诉你a day in the life,真的会是tomorrow never knows?相信学了计概之后这个不会是难题,现在就来实现吧。
读入一个格式为yyyy-mm-dd的日期(即年-月-日),输出这个日期下一天的日期。可以假定输入的日期不早于1600-01-01,也不晚于2999-12-30。
输入
- 输入仅一行,格式为yyyy-mm-dd的日期。 输出
- 输出也仅一行,格式为yyyy-mm-dd的日期 样例输入
-
2010-07-05
样例输出
-
2010-07-06
提示
-
闰年的标准:
(1)普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年)
地球公转示意图
(2)世纪年能被400整除的是闰年。(如2000年是闰年,1100年不是闰年)
输入语句scanf("%d-%d-%d",&y,&m,&d)可以存储年,月,日.输出语句格式类似printf("%d-%02d-%02d\n",year,month,day). -
-
#--------------------------------------------------------------------------------#
-
- 其他的都不用说,但是…… 坑 啊啊啊!!!!!!!!
-
- 它没有说保证输入数据无误!
-
-
也就是说,输入数据会有类似于“2016-3-35”“2016-1-0”
“2016-13-1”
等等,
比如说第一个数据,应该输出“2016-04-01”,第二个应该是“2016-01-01”,第三组数据应该是没有的,因为我的AC代码测第三组输出“2016-13-01”……
然后就几个if完事。
当然我的代码很长,可以用数组的方式简化一下(应该可以控制在20行左右,甚至缩短到10行):
#include<cstdio>
int main()
{
int y,m,d;
scanf("%d-%d-%d",&y,&m,&d);
int f=1;
if(m==1||m==3||m==5||m==7||m==8||m==10)
{
if(d>=31)
{
d=1;
m++;
f=0;//f的作用就是在判断了一种就不用再判断了,因为这个if中最大月份只有10,++之后也只有11,即不用再判断月份是否大于12
}
else
d++;
}
if(m==12&&f)
{
if(d>=31)
{
m=1;
y++;
d=1;
}
else
d++;
}
if(m==2&&f)
{
if((y%4==0&&y%100!=0)||y%400==0)
{
if(d>=29)
{
d=1;
m++;
}
else
d++;
}
else
{
if(d>=28)
{
d=1;
m++;
}
else
d++;
}
}
if((m==4||m==6||m==9||m==11)&&f)
{
if(d>=30)
{
d=1;
m++;
}
else
d++;
}
printf("%d-%02d-%02d",y,m,d);
}
其他的也没什么好说的,我wrong了6次…… By WZY