题解 | #日期累加#
日期累加
https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d
#include <iostream> #include <cstdio> using namespace std; int year, mon, day, remain; int monday[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; bool Is_Leap_Year(int year) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return 1; } return 0; } int WholeYear(int year) { if (Is_Leap_Year(year)) { return 366; } return 365; } int main() { int n; cin >> n; while (n--) { cin >> year >> mon >> day >> remain; int yeap = Is_Leap_Year(year); for (int i = 1; i < mon; i++) { remain += monday[yeap][i]; } mon = 1; remain += day; while (remain > WholeYear(year)) { remain -= WholeYear(year); year++; } yeap = Is_Leap_Year(year); for (int i = 1; ; i++) { if (remain > monday[yeap][i]) { remain -= monday[yeap][i]; mon++; } else { break; } } day = remain; printf("%d-%02d-%02d\n", year, mon, day); } } //泰裤辣 // 64 位输出请用 printf("%lld")