PAT练习 日期类

    技术2025-10-30  8

    PAT练习 日期类

    题目描述

    编写一个日期类,要求按xxxx-xx-xx 的格式输出日期,实现加一天的操作。

    输入

    输入第一行表示测试用例的个数m,接下来m行每行有3个用空格隔开的整数,分别表示年月日。测试数据不会有闰年。

    输出

    输出m行。按xxxx-xx-xx的格式输出,表示输入日期的后一天的日期。

    样例输入

    2 1999 10 20 2001 1 31

    样例输出

    1999-10-21 2001-02-01

    提示

    注意个位数日期前面要有0。

    C++实现

    #include <iostream> #include <string.h> #include <stdio.h> using namespace std; const 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}}; bool isLeap(int year){ return (year%4==0 && year%100!=0)||(year%400==0); } int main(){ int year_num,month_num,day_num,m; scanf("%d",&m); for(int i=0;i<m;i++){ scanf("%d %d %d",&year_num,&month_num,&day_num); if(day_num==month[month_num][isLeap(year_num)]){ day_num=1; if(month_num==12){ month_num=1; year_num++; }else{ month_num++; } }else{ day_num++; } if(year_num<10){ printf("000"); }else{ if(year_num<100){ printf("00"); }else{ if(year_num<1000){ printf("0"); } } } printf("%d-",year_num); if(month_num<10){ printf("0"); } printf("%d-",month_num); if(day_num<10){ printf("0"); } printf("%d\n",day_num); } return 0; }

     

    Processed: 0.009, SQL: 9