给定一个日期题的模板;
#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;
}


京公网安备 11010502036488号