#include <iostream>
#include <iomanip>
using namespace std;
class Date
{
public:
Date(int y = 1,int m = 1, int d = 1)//err 要么全缺省要么无参
:_y(y),_m(m),_d(d)
{}
int Get(int y, int m)const
{
static int M[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if(m == 2 && (y%4 == 0 && y%100 != 0) || (y%400 == 0) )
return 29;
return M[m-1];
}
Date& operator++();
Date& operator+=(int day);
int GetY()
{
return _y;
}
int GetM()
{
return _m;
}
int GetD()
{
return _d;
}
private:
int _y;
int _m;
int _d;
};
Date& Date::operator+=(int day) //err Date类名忘加
{
while(day--)
{
// (*this)++;//这是后置++!!
++(*this);
}
return *this;
}
Date& Date::operator++()
{
if(_d + 1 > Get(_y,_m))
{
if(_m + 1 > 12)
{
++_y;
_m = 1;
_d = 1;
}
else
{
++_m;
_d = 1;
}
}
else
{
++_d;
}
return *this;
}
int main()
{
int m1, y, m, d;
cin >> m1;
int m2 = m1;
//开数组用于存储结果
// int* arr = new int[3m1]{0};
int* arr = new int[3*m1](); //err 3*m1写成了3m1 要想"全部元素初始化为0 就只有()
int j = 0;
while(m1--)
{
cin >> y >> m >> d;
int day;
cin>>day;
Date D(y,m,d);
D += day;
arr[j++] = D.GetY();
arr[j++] = D.GetM();
arr[j++] = D.GetD();
}
for(int i = 0;i<3*m2;i+=3) //err跳跃错误
{
cout << setfill('0') << setw(4) << arr[i];
cout << "-";
cout << setfill('0') << setw(2) << arr[i+1];
cout << "-";
cout << setfill('0') << setw(2) << arr[i+2] << endl;
}
}
// 64 位输出请用 printf("%lld")