已知今天的日期,请你推算若干天后是什么日期。
说明:假设今天的日期是 y1 年 m1 月 d1 日,过 n 天后的日期为 y2 年 m2 月 d2 日。
输入格式
y1/m1/d1
n(n>0)
输出格式
y2/m2/d2
注:y2 至少4位数字,m2 和 d2 至少2位数字,若位数不够,则前面补0。//得分关键!!!
输入样例
2018/2/14
22
输出样例
2018/03/08
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
#include <stdio.h>
int leapyear(int year)
{
return(((year % 4 == 0 ) && (year % 100 != 0)) || year % 400 == 0);
}
void new_date(int year, int month, int day,int n)
{
if(month==1 || month==3 ||month==5 ||month==7 ||month==8)
{
if(day+n<=31)
{
day+=n;
printf("%04d/0%d/%02d\n",year,month,day);
}
else if(day+n>31)
{
month++;
n=n-(31-day);
day=0;
new_date(year,month,day,n);
}
}
else if(month==4 ||month==6 ||month==9)
{
if(day+n<=30)
{
day+=n;
printf("%04d/0%d/%02d\n",year,month,day);
}
else if(day+n>30)
{
month++;
n=n-(30-day);
day=0;
new_date(year,month,day,n);
}
}
else if(month==10)
{
if(day+n<=31)
{
day+=n;
printf("%04d/%d/%02d\n",year,month,day);
}
else if(day+n>31)
{
month++;
n=n-(31-day);
day=0;
new_date(year,month,day,n);
}
}
else if(month==11)
{
if(day+n<=30)
{
day+=n;
printf("%04d/%d/%02d\n",year,month,day);
}
else if(day+n>30)
{
month++;
n=n-(30-day);
day=0;
new_date(year,month,day,n);
}
}
else if(month==12)
{
if(day+n<=31)
{
day+=n;
printf("%04d/%d/%02d\n",year,month,day);
}
else if(day+n>31)
{
month=1;
year++;
n=n-(31-day);
day=0;
new_date(year,month,day,n);
}
}
else if(month==2)
{
if(leapyear(year))
{
if(day+n<=29)
{
day+=n;
printf("%04d/0%d/%02d\n",year,month,day);
}
else if(day+n>29)
{
month++;
n=n-(29-day);
day=0;
new_date(year,month,day,n);
}
}
else
{
if(day+n<=28)
{
day+=n;
printf("%04d/0%d/%02d\n",year,month,day);
}
else if(day+n>28)
{
month++;
n=n-(28-day);
day=0;
new_date(year,month,day,n);
}
}
}
}
int get_date(char s[])/*将在字符串中的日期提取到一个int型整数中去,便于后面获取单独的year,month,day*/
{
int i=0,sum=0,x=0;
for(;s[i]!='/';i++)//提取年份,存入sum
{
if(s[i]>='0' && s[i]<='9')
{
x=s[i]-'0';
sum=sum*10+x;
}
}
for(i++;s[i]!='/';i++)//提取月份,存入sum
{
if(s[i]>='0' && s[i]<='9')
{
if(s[i+1]=='/' && s[i-1]=='/')
{
sum=sum*10;
x=s[i]-'0';
sum=sum*10+x;
}
if(s[i+1]!='/' || s[i-1]!='/')
{
x=s[i]-'0';
sum=sum*10+x;
}
}
}
for(i++;s[i]!='\0';i++)//提取日期,存入sum
{
if(s[i]>='0' && s[i]<='9')
{
if(s[i-1]=='/' && s[i+1]=='\0')
sum=sum*10;
x=s[i]-'0';
sum=sum*10+x;
}
}
return sum;
}
int main()
{
int year,month,day,n,x=0;
char s[11];
gets(s);//输入带'/'的日期
scanf("%d",&n);
x=get_date(s);
day=x%100; x/=100; month=x%100; x/=100; year=x;//得到不带'/'的年月日
new_date(year,month,day,n);//通过函数得到新日期并按要求输出
return 0;
}