题目描述
设计一个程序能计算一个日期加上若干天后是什么日期。
输入
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。
输出
输出m行,每行按yyyy-mm-dd的个数输出。
样例输入
1 2008 2 3 100
样例输出
2008-05-13
个人思路:日期处理的问题主要是得区分闰年平年二月的天数及每个月的天数,细节比较繁琐,本题输格式也有了限定yyyy-mm-dd 且需要补0,增加了细节问题,采用一个二维数组分别存储平年闰年的月份。每次数组内判断闰年平年(详细见代码),并且我将累加n天分解为每次加一天,使用while(n--)循环达到累加n天,分解成累加一天的问题。参考代码比较好理解:
#include <iostream>
#include <iomanip>
using namespace std;
int a[13][2] = {{0,0},{31,31},{28,29},{31,31},{30,30},
{31,31},{30,30},{31,31},{31,31},{30,30},
{31,31},{30,30},{31,31}};//int a[][0]代表平年月份a[][1]代表闰年
bool isLeap(int year)
{
return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
}
int main()
{
int x; //输入测试用例的组数
cin >> x;
while(x--)
{
int y,m,d,n; //年月日及其相加天数
cin >> y >> m >> d >> n;
while(n--)//相当于d天数 n次加一
{
for(int i = 0; i < 13; i++)
{
if(m == i && d < a[i][isLeap(y)])
{
d++;
break;
}
else if(m == i && d == a[i][isLeap(y)])
{
d = 1;
m++;
if(m > 12)
{
m = 1;
y++;
}
break;
}
}
}
cout << setw(4) << setfill('0') << y << "-";
cout << setw(2) << setfill('0') << m << "-";
cout << setw(2) << setfill('0') << d << endl;
}
return 0;
}