题解 | #日期累加#
日期累加
https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int dayn[3][13]={{0,31,28,31,30,31,30,31,31,30,31,30,32},{0,31,29,31,30,31,30,31,31,30,31,30,32}}; bool isleapyear(int year){ return year%400==0||(year%4==0&&year%100!=0); } int numofyear(int year){ if(isleapyear(year)) return 366; else return 365; } int main(){ int year,month,day,number,row; int casenum; scanf("%d",&casenum); while(casenum--){ scanf("%d%d%d%d",&year,&month,&day,&number); int row=isleapyear(year); for(int j=0;j<month;j++) number+=dayn[row][j]; number+=day; while(number>numofyear(year)){ number-=numofyear(year); year++; } month=0; row=isleapyear(year); while(number>dayn[row][month]){ number-=dayn[row][month]; month++; } day=number; printf("%04d-%02d-%02d\n",year,month,day); } return 0; }