知识点:基础数学、模拟

描述

编写一个日期类,要求按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;
}