题解 | #日期累加#
日期累加
https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d
#include <iostream> using namespace std; #define isyear(x) ((x%4 ==0)&&(x%100 !=0)||(x%400 == 0)) void GetNewDay(int year,int month,int day,int addday) { int _year=year; int _month=0; int _day=0; static int Day[13][2]={0,0 ,31,31, 59,60, 90,91, 120,121, 151,152, 181,182, 212,213, 243,244, 273,274, 304,305, 334,335, 365,366}; int daysum=Day[month-1][isyear(year)]+addday+day; while(daysum>Day[12][isyear(_year)]) { daysum-=Day[12][isyear(_year)]; _year++; } for(int i=0;i<13;++i) { if(daysum>Day[i][isyear(_year)]) { } else { _month=i; _day=daysum-Day[i-1][isyear(_year)]; break; } } printf("%d-%02d-%02d\n",_year,_month,_day); } int main() { int size=0; cin>>size; while(size--) { int year=0; int month=0; int day=0; int addday=0; cin>>year>>month>>day>>addday; GetNewDay(year,month,day,addday); } return 0; }