date change
You are given a date in “DD.MM.YYYY” (“day.month.year”) format and a number of days shift you have to add to this date. Output the resulting date.
Input
The first line of input contains the date in “DD.MM.YYYY” format: two digits for day (with leading zero if needed), dot, two digits for month (with leading zero if needed), dot, four digits for year. The notation is guaranteed to give a valid date between 1980 and 2020, inclusive.
The second line contains an integer shift ( - 1000 ≤ shift ≤ 1000).
Output
Output a date equal to the given one + shift days, in the same format “DD.MM.YYYY”.
Examples
Input
10.02.2012
12
Output
22.02.2012
Input
01.02.2010
-40
Output
23.12.2009
Input
01.01.2000
365
Output
31.12.2000
Input
13.08.1990
-609
Output
12.12.1988
Note
When manipulating the dates, take into account leap years; don’t care about time zones/daylight saving time.
题意好理解,给你一个时期,然后给你一个数,在这个日期上加上或者减去一个数,求最后的日期是多少。问题没有什么技术含量,但是有很多要考虑的。闰年二月与平年二月,在减去某个数时相应的月份与年份的变化。题目不难,细节处理好就可以了。(一天就写了一道题,阿西吧。在床上躺了一天了)。
代码给上:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int d,m,y;
int nd;
char a,b;
int md[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};//把除了二月之外的每个月的天数保存到数组里。
int main()
{
while(scanf("%2d%c%2d%c%4d",&d,&a,&m,&b,&y)!=EOF)
{
int x;
scanf("%d",&nd);
if(nd>=0)//增加某个数字
{
while(nd)
{
if(m==02)//二月应该特判啦
{
if(y%4) x=28;
else x=29;
}
else x=md[m];
d++;
if(d>x)
{
d=1;
m++;
if(m>12)
{
y++;
m=1;
}
}
nd--;
}
printf("%.2d%c%.2d%c%.4d\n",d,a,m,b,y);
}
else
{
while(nd<0)//减去一个数字
{
d--;
if(d<1)//d=0的时候表示应该减一个月份了。
{
if(m==1) //如果当前月份为一月的话,减完之后应该就是去年的十二月了
{
m=12;
y--;
x=md[m];
}
else if(m==3)//如果是三月的话,减完之后是二月,特判,嘤嘤嘤。
{
if((y%4)) x=28;
else x=29;
m=2;
}
else//其余的就直接写就可以了啊。
{
m--;
x=md[m];
}
d=x;
}
nd++;
}
printf("%.2d%c%.2d%c%.4d\n",d,a,m,b,y);
}
}
return 0;
}
努力加油a啊,(o)/~