给定一个日期题的模板;
#include<iostream> using namespace std; bool isLeapYear(int year){ //平均每四年一次闰年,但是400的倍数也是闰年 if(year%4==0&&year%100!=0||year%400==0){ return true; }return false; } int daytab[2][13]={ //日期表,记录每个月有多少天(其实只有二月有变化,闰年29,平年28) {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} }; int main(){ int m,year,month,day,n; cin>>m; while(m--){ cin>>year>>month>>day>>n; n+=day; day=0;//例如2008 2 3 100-->2008 2 0 103(方便计算) while(n>=daytab[isLeapYear(year)][month]){//以月为单位,知道最后不满一个月 n-=daytab[isLeapYear(year)][month]; day=0; if(month==12){//如果month为12月了,则要进位一年 month=1;year++; }else{ month++; } }day+=n; if(day==0){//因为是设置从0开始的,所以比如2008 6 30会输出成2008 7 0,要转换一下 month--; day=daytab[isLeapYear(year)][month]; } printf("%04d-%02d-%02d\n",year,month,day); } return 0; }