欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

日期类-北京理工大学复试上机题-王道考研

程序员文章站 2024-03-21 19:54:34
...

网址
http://t.cn/E9RJUp4
日期类
描述
编写一个日期类,要求按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。

思路:
注意边界值的特殊判断即可,很简单。

#include<iostream>
using namespace std;

int daytab[2][13]
{
    {0,31,28,31,30,31,30,31,31,30,31,30,31},
    {0,31,29,31,30,31,30,31,31,30,31,30,31}
};
bool isLeapYear(int year)
{
    return (year%4==0&&year%100!=0||year%400==0);
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int year,month,day;
        scanf("%d %d %d",&year,&month,&day);
        if(month == 12 && day == 31)
        {
            year++;
            month = 1;
            day = 1;
        }
        else if(day == daytab[isLeapYear(year)][month])
        {
            month++;
            day = 1;
        }
        else
        {
            day++;
        }
        
        printf("%04d-%02d-%02d\n",year,month,day);
    }
}