知识点:基础数学、模拟
描述
编写一个日期类,要求按xxxx-xx-xx的格式输出日期,实现加一天的操作。
输入描述:
输入第一行表示测试用例的个数m,接下来m行每行有3个用空格隔开的整数,分别表示年月日。测试数据不会有闰年。
输出描述:
输出m行。按xxxx-xx-xx的格式输出,表示输入日期的后一天的日期。
示例1
输入
2
1999 10 20
2001 1 31
输出
1999-10-21
2001-02-01
备注:
注意个位数日期前面要有0。
题解
该题是模拟类的日期问题,通过输入给定的日期来得到后天的具体的日期。 首先需要利用日期知道给定的日期是今年的第多少天,用n表示;对n加一后再依次逐月的累减每个月的天数,直到求出月份,剩下的天数便是日期。
代码:
#include <iostream>
#include <cstdio>
using namespace std;
int mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//对月份数据预处理,因为输入的数据没有闰年不用考虑闰年的情况。
int main(){
int n;
cin >> n;
int y, m, d;
while(n--){ //多次输入数据使用while循环进行输入
int sum = 1;//确定日期加1后的天数,因此设置初始值为1
cin >> y >> m >> d;
for(int i = 0; i < m; i++){ //依次累加得到日期为今年的多少天
sum += mon[i];
}
sum += d;
if(sum > 365){ //确定年
y++;
}
int m = 0;
while(sum > mon[m]){ //确定月
sum -= mon[m];
m++;
}
d = sum; // 确定日
printf("%d-%02d-%02d\n", y , m, d);
}
return 0;
}