02_日期累加

题目描述

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

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

题解

基于日期类:

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

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

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

#include<iostream>
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;
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值