日期的推算*

已知今天的日期,请你推算若干天后是什么日期。

说明:假设今天的日期是 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;
}

a737f16a9d1949e999e03edf3aad18cf.png

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮央乜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值