目录
题目描述
编写一个日期类,要求按 xxxx-xx-xx 的格式输出日期,实现加一天的操作。
输入
第一行包含整数 T,表示共有 T 组测试数据。
每组数据占一行,包含 33个用空格隔开的整数,分别表示年月日。
输出
每组数据输出一行,一个结果,按 xxxx-xx-xx 的格式输出,表示输入日期的后一天的日期。
样例输入
2 1999 10 20 2001 1 31
样例输出
1999-10-21 2001-02-01
思路1 用if判断 感觉有点长
a记录循环输入几次,用x,y,z储存年月日,
先判断y(月)是不是二月,和z(日)是不是28或29,是就判断x(年)是不是闰年,判断出来二月有没有29日,
再进行z加一判断是不是超过,28||29||30||31(二月不是闰年||二月是闰年||4,6,9,11||1,3,5,7,8,10,12),再判断y是不是大于12,
伪代码
if(y==2&&z==28)
{
if(x==闰年)
{
z++
}else
{
z=1;
y=3;
}}
else if(y==2&&z==29)
{
z=1;
y=3;
}
else
{
}
思路二 用switch
就本质和if一样,只不过用switch先判断月份,分成12个(好像也挺多)
AC代码 switch的奇怪用法
#include<stdio.h>
int main()
{
int n,a,b,c,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d %d",&a,&b,&c);
switch(b)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
if(c==31)
{
c=1;
b+=1;
}
else
{
c+=1;
}
break;
case 12:
if(c==31)
{
c=1;
b=1;
a+=1;
}
else
{
c+=1;
}
break;
case 4:
case 6:
case 9:
case 11:
if(c==30)
{
c=1;
b+=1;
}
else
{
c++;
}
break;
case 2:
if(c==28)
{
c=1;
b+=1;
}
else
{
c+=1;
}
break;
}
printf("%04d-%02d-%02d\n",a,b,c);
}
return 0;
}