日期累加

问题 E: 日期累加
时间限制: 1 Sec  内存限制: 32 MB
献花: 45  解决: 32
[献花][花圈][TK题库]
题目描述
设计一个程序能计算一个日期加上若干天后是什么日期。
输入
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。
输出
输出m行,每行按yyyy-mm-dd的个数输出。
样例输入
1
2008 2 3 100
样例输出
2008-05-13

计算一个日期加上多少天后的日期,
用month【13】【2】数组存储每个月的天数,使用二维是为了存储平年和闰年的每月天数,然后写一个isleap(int year)函数判断是闰年还是平年,返回值为0或1,使用month【m】【isleap(y)】来计算当月天数,m为第几个月,isleap返回0表示平年,返回1表示闰年。

代码简单思想:若加上的天数add大于当月的天数,则add减去当月的天数,并使月数m加1,表示多余的日期直接换算为月数并添加上去,过程中若月数m=13,则年数y加1,m从1开始,循环直到add小于当月的天数,然后用剩下add天数与日期的天数d相加,再判断一次d是否超过当月天数的限制,最后输出ymd。

输出:年数4位“%04d”,月数2位“%02d”,天数2位“%02d”

#include<stdio.h>

int month[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}};

bool isleap(int year)
{
    return ((year%4 ==0 && year% 100 !=0) ||(year%400 ==0));
}

int main()
{
    int n=0;
    int y=0,m=0,d=0;
    int add=0;
    scanf("%d",&n);
    while(n>0)
    {
        scanf("%d%d%d%d",&y,&m,&d,&add);

        while(add>month[m][isleap(y)])
        {
            add=add-month[m][isleap(y)];
            m++;
            if(m==13)
            {
                y++;
                m=1;
            }


        }
        d=d+add;
        if(d>month[m][isleap(y)])
        {
            m++;
            d=d-month[m][isleap(y)];
        }

        printf("%04d-%02d-%02d\n",y,m,d);
        n--;                
    }
    return 0;

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值