问题 D: 日期类
时间限制 : 1.000 sec 内存限制 : 32 MB
解决 : 650 提交 : 890题目描述
编写一个日期类,要求按xxxx-xx-xx 的格式输出日期,实现加一天的操作。
输入
输入第一行表示测试用例的个数m,接下来m行每行有3个用空格隔开的整数,分别表示年月日。测试数据不会有闰年。
输出
输出m行。按xxxx-xx-xx的格式输出,表示输入日期的后一天的日期。
样例输入
2 1999 10 20 2001 1 31
样例输出
1999-10-21 2001-02-01
提示
注意个位数日期前面要有0。
关于日期的可以看看先这篇文章:【纯干货】超全! 计算天数、计算星期几等日期问题 一文炖!
本题比较简单,直接将日期后推一天即可,只需要注意当日超过该月最大日时,要迈进下一个月。
代码如下:
//
// Created by LittleCat on 2020/2/2.
//
#include <cstdio>
/* 平年和闰年每个月的天数 */
int month[13][2] = {
{0, 0}, {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30},
{31, 31}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}
};
/* 判断y年是否为闰年
* 是 则返回1 ; 否 则返回0 */
int isLeapYear(int y) {
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
return 1;
return 0;
}
int main() {
int n;
while (EOF != scanf("%d\n", &n)) {
int y, m, d;
for (; n; n--) {
scanf("%d %d %d", &y, &m, &d);
d++; //天数进1
/* 当月天数已满 */
if(d == month[m][isLeapYear(y)] + 1) {
d = 1;
m++;
}
/* 月份数已满 */
if(m == 13) {
y++;
m = 1;
}
printf("%04d-%02d-%02d\n", y, m, d);
}
}
}
end
欢迎关注个人公众号“ 鸡翅编程 ”,这里是认真且乖巧的码农一枚。
---- 做最乖巧的博客er,做最扎实的程序员 ----
旨在用心写好每一篇文章,平常会把笔记汇总成推送更新~