题解 | 日期累加
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main() {
int num; // 样例个数
cin >> num;
int y, m, d;
int n;
for (int i = 0; i < num; i++) {
cin >> y >> m >> d >> n;
n += d;
while (n > 31) {
bool flag = false; // 标记是否为闰年
if ((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) flag = true;
switch (m) {
case 1:
if (n > 31) {
n -= 31;
m++;
} else break;
case 2:
if (flag) {
if (n > 29) {
n -= 29;
m++;
} else break;
} else {
if (n > 28) {
n -= 28;
m++;
} else break;
}
case 3:
if (n > 31) {
n -= 31;
m++;
} else break;
case 4:
if (n <= 30) break;
n -= 30;
m++;
case 5:
if (n <= 31) break;
n -= 31;
m++;
case 6:
if (n <= 30) break;
n -= 30;
m++;
case 7:
if (n <= 31) break;
n -= 31;
m++;
case 8:
if (n <= 31) break;
n -= 31;
m++;
case 9:
if (n <= 30) break;
n -= 30;
m++;
case 10:
if (n <= 31) break;
n -= 31;
m++;
case 11:
if (n <= 30) break;
n -= 30;
m++;
case 12:
if (n <= 31) break;
n -= 31;
m = 1;
y++;
}
}
// 按照yyyy-mm-dd格式输出日期
cout << y << '-';
if (m < 10) cout << 0;
cout << m << '-';
if (n < 10) cout << 0;
cout << n << endl;
}
return 0;
}
