题解 | #日期累加#
日期累加
https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d
#include <iostream> #include<iomanip> using namespace std; int Month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; void LastDay(int year, int month, int day, int num) { if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) { Month[2] = 29; } else { Month[2] = 28; } int m = 0; if (day + num <= Month[month]) { day += num; cout << year << "-" << setfill('0') << setw(2) << month << "-" << setfill('0') << setw(2) << day << endl; return; } num -= Month[month] - day; if (month == 12) { month = 0; year++; if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) { Month[2] = 29; } else { Month[2] = 28; } } int i = 0; last: for (i = month + 1; num > Month[i] && i != 13; i++) { num -= Month[i]; } month = i; if (i == 13 && num <= 0) { month = 12; day = Month[month] - num; cout << year << "-" << setfill('0') << setw(2) << month << "-" << setfill('0') << setw(2) << day << endl; return; } else if (i == 13 && num > 0) { ++year; month = 0; if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) { Month[2] = 29; } else { Month[2] = 28; } goto last; } day = num; cout << year << "-" << setfill('0') << setw(2) << month << "-" << setfill('0') << setw(2) << day << endl; } int main() { int n = 0, year, month, day, num; cin >> n; for (int i = 0; i < n; i++) { cin >> year >> month >> day >> num; LastDay(year, month, day, num); } }