14-求两个日期之间的天数

需要考虑的细节比较多,例如:

1、是否同一年

2、是否同一月

3、是否为闰年

4、是否有2月


#include <iostream>

using namespace std;

int month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

int main()
{
    int y1,m1,d1,y2,m2,d2;
    int res = 0;
    cin>>y1>>m1>>d1>>y2>>m2>>d2;
    if(y1 == y2)
    {
        if(m1 == m2)                    //同年同月日期相减
            res += d2-d1+1;
        else                            //同年不同月
        {
            for(int m=m1;m<m2;m++)    //先求m1和m2之间天数,含m1不含m2
            {
                if(m == 2)            //存在2月就判断是否加1
                {
                    if((y1%4 == 0 && y1%100 != 0) || y1%400 == 0)
                        res += 1;
                }
                res += month[m];
            }
            res = res-d1+1;      //将m1中天数减掉
            res += d2;                  //再加m2天数
        }
    }
    else
    {//不同年,先求中间年的天数
        for(int y=y1+1;y<y2;y++)
        {
            if((y%4 == 0 && y%100 != 0) || y%400 == 0)  //如果中间有闰年,多加一天
                res += 1;
            res += 365;
        }
        //求y1年剩余天数,注意从m1开始算
        for(int m=m1;m<=12;m++)
        {
            if(m == 2)
            {
                if((y1%4 == 0 && y1%100 != 0) || y1%400 == 0)
                    res += 1;
            }
            res += month[m];
        }
        res = res-d1+1;             //将d1日期减掉
        //求y2年到d2的天数
        for(int m=1;m<m2;m++)
        {
            if((y2%4 == 0 && y2%100 != 0) || y2%400 == 0)
                res += 1;
            res += month[m];
        }
        res += d2;
    }
    cout<<res<<endl;
    return 0;
}

(感谢西交wrong学长提供以上题目练习)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值