描述
设计一个程序能计算一个日期加上若干天后是什么日期。
输入
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。
输出
输出m行,每行按yyyy-mm-dd的个数输出。
输入样例 1
1
2008 2 3 100
输出样例 1
2008-05-13
#include <bits/stdc++.h>
using namespace std;
const int common[12]={31,28,31,30,31,30,31,31,30,31,30,31};//不是闰年的情况
const int leap[12]={31,29,31,30,31,30,31,31,30,31,30,31};//是闰年的情况
int isleap(int n)
{
int p=0;
if(!(n%400))
p=1;
else if(!(n%100))
p=0;
else if(!(n%4))
p=1;
else
p=0;
return p;
}//判断是否为闰年
int main()
{
int m;
cin>>m;
while(m--)
{
int y,mo,d,day;
cin>>y>>mo>>d>>day;
while(day--)
{
if(mo==12&&d==31)
{
y++;
mo=1;
d=1;
}//如果为y.12.31号,结果为y+1.1.1
else if(isleap(y)&&mo==2&&d==29)
{
mo++;
d=1;
}//如果为闰年2.29,则为3.1
else if(!isleap(y)&&mo==2&&d==28)
{
mo++;
d=1;
}//如果不是闰年2.28,也为3.1
else if((mo==1||mo==3||mo==5||mo==7||mo==8||mo==10||mo==12)&&d==31)//注意括号
{
mo++;
d=1;
}
else if((mo==2||mo==4||mo==6||mo==9||mo==11)&&d==30)//注意括号
{
mo++;
d=1;
}
else
{
d++;
}
}
printf("%04d-%02d-%02d\n",y,mo,d);//注意输出格式以及换行
}
return 0;
}