今日算后天日期
题目描述
已知今天的日期,请输出后天的日期。
即,对于给定的日期,请计算出该日期加上2天的结果日期。
例如:今天的日期为2023-01-21,则后天的日期为2023-01-23。
功能需求
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。
每组测试输入1个日期,日期形式为“yyyy-mm-dd”(年份4位,月份2位,日份2位,位数不足时前补0)。
保证输入的日期合法,而且输入的日期和计算结果都在[1200-01-01,9999-12-31]范围内。
输出格式:
对于每组测试,在一行上以“yyyy-mm-dd”的形式输出结果日期。
输入样例:
2
2023-01-21
2023-02-27
输出样例:
2023-01-23
2023-03-01
提示说明
说明其一
分析:看着简单,其实暗藏玄ji。
1)注意闰年平年,闰年2月29天,平年2月28天。
闰年是可以被4整除而不能被100整除,或被400整除的
2)注意月份,1,3,5,7,8,10,12月31天;4,6,9,11月30天;
3)尤其关注12月份和每月末,前者必要时改变年份,后者必要时改变月份;
说明其二
c语言中%03d的含义
这是用在printf或scanf函数中的格式符,用来以特定的格式输入和输出字符。
% 是格式符的开始。
d 表示有符号整数。
3 表示最小输出3位数字。
0 表示如果数字不足3位,在左边用0补成3位。
如printf(“%03d”, 1); 会打印出 001‘
代码内容
#include <stdio.h>
int main()
{
int y,m,d,y1,m1,d1;
int T,i=1;
printf("请输入测试数据的组数:");
scanf("%d",&T);
while(T>=i)
{
printf("请输入第%d组测试组数\n",i);
scanf("%d-%02d-%02d",&y,&m,&d);
y1=y;
m1=m;
d1=d;
if((y%4==0&&y%100!=0)||y%400==0)
{
if(m==1||m==3||m==5||m==7||m==8||m==10)
{
if(d==31) d1=2,m1=m+1;
if(d==30) d1=1,m1=m+1;
if(d>=1&&d<=29) d1=d+2;
}
if(m==2)
{
if(d==29) d1=2,m1=m+1;
if(d==28) d1=1,m1=m+1;
if(d>=1&&d<=27) d1=d+2;
}
if(m==4||m==6||m==9||m==11)
{
if(d==30) d1=2,m1=m+1;
if(d==29) d1=1,m1=m+1;
if(d>=1&&d<=28) d1=d+2;
}
if(m==12)
{
if(d==31) d1=2,y1=y+1,m1=1;
if(d==30) d1=1,y1=y+1,m1=1;
if(d>=1&&d<=29) d1=d+2;
}
}
else
{
if(m==1||m==3||m==5||m==7||m==8||m==10)
{
if(d==31) d1=2,m1=m+1;
if(d==30) d1=1,m1=m+1;
if(d>=1&&d<=29) d1=d+2;
}
if(m==2)
{
if(d==28) d1=2,m1=m+1;
if(d==27) d1=1,m1=m+1;
if(d>=1&&d<=26) d1=d+2;
}
if(m==4||m==6||m==9||m==11)
{
if(d==30) d1=2,m1=m+1;
if(d==29) d1=1,m1=m+1;
if(d>=1&&d<=28) d1=d+2;
}
if(m==12)
{
if(d==31) d1=2,y1=y+1,m1=1;
if(d==30) d1=1,y1=y+1,m1=1;
if(d>=1&&d<=29) d1=d+2;
}
}
printf("%d-%02d-%02d\n",y1,m1,d1);
i++;
}
return 0;
}