02_日期累加

题目描述

设计一个程序能计算一个日期加上若干天后是什么日期。

  • 输入描述:
    输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。
  • 输出描述:
    输出m行,每行按yyyy-mm-dd的个数输出。

题解

1.定义一个静态数组存放12个月每月对应的天数,其中2月默认为28天。若是闰年则2月为29天。

2.累加日期,若是大于当月所对应的天数,则向月进位;如果月增加到13,则另月为1,向年进位。

3.注意题目要求的输入输出方式。

#include
using namespace std;

class Date
{
     
private:
    int _year;
    int _month;
    int _day;
public:
    int _n;
    
    //获取当月日期
    int GetMonthDay(int year,int month){
     
        static int arr[13]={
     0,31,28,31,30,31,30,31,31,30,31,30,31};
        //如果是闰年:四年一闰,百年不闰;四百年又闰
        if(month==2 &&((year%4==0 && year%100!=0) || (year%400==0)))
            return 29;
        return arr[month];
    }
    
    // +=运算符重载
     Date& operator+=(int n){
     
         _day+=n;
         while(_day > GetMonthDay(_year, _month)){
     
             _day-=GetMonthDay(_year, _month);
             ++_month;
             if(_month==13){
     
                 ++_year;
                 _month=1;
             }
         }
         return *this;
     }
     
    //输入日期
    void Input(){
     
        int year,month,day,n=0;
        cin>>year>>month>>day>>n;
        //判断输入日期是否合法
        if (year >= 0 && month >= 1 && month <= 12 && day >= 1 && day <= GetMonthDay(year, month)){
     
            _year=year;
            _month=month;
            _day=day;
            _n=n;
        }
    }
    
    //输出
    void Print(){
     
            printf("%d-%02d-%02d\n",_year,_month,_day);
    }
};

int main(){
     
    int count=0;
    int year,month,day,n=0;
    cin>>count;
    Date d[count];
    for(int i=0;i<count;++i)
        d[i].Input();
    for(int j=0;j<count;++j){
     
        d[j]+=d[j]._n;
        d[j].Print();
    }
    return 0;
}

你可能感兴趣的