日期差值(c++)

文章讲述了如何编写程序来计算两个给定日期之间的天数差异,特别考虑了闰年的情况,以及当两个日期连续时天数应为两天的规则。
摘要由CSDN通过智能技术生成

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。

输入格式

输入包含多组测试数据。

每组数据占两行,分别表示两个日期,形式为 YYYYMMDD

输出格式

每组数据输出一行,即日期差值。

数据范围

年份范围 [1,9999],
保证输入日期合法。
测试数据的组数不超过 100。

输入样例:
20110412
20110422
输出样例:
11

题解:

我们可以分别计算从公元1年开始到这个日期的天数,然后再相减就行了。

这里难免少不了闰年的判断,代码如下:

if((year%4==0&&year%100!=0)||year%400==0)

首先我们要将给出的数提取出年月日分别是多少。那怎么从一个数里面取出自己想要的数,这个有规律,其实应该还是挺简单的吧,算是编程入门。

我们先定义一个数组储存每个月份的天数,然后再修改就好了,这里有一个技巧。

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

这样数组索引为1的位置就是1月份的天数了。

注意:题目要输入多组数据。所以

while(cin>>day1>>day2)

完整代码如下:

#include<iostream>
#include<cmath>
using namespace std;

int monthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int day1,day2;

int get(int n)
{
    int cnt=0;
    int year=n/10000;
    int month=n%10000/100;
    int day=n%100;
    
    if((year%4==0&&year%100!=0)||year%400==0) monthday[2]=29;
    else monthday[2]=28;
    
    cnt+=day;
    
    while(month--) cnt+=monthday[month];
    while (year--)
    {  
        if ((year % 4 == 0&&year%100!=0) || (year % 400 == 0)) 
        {  
            cnt += 366;//闰年一共有这么多天
        } 
        else cnt += 365;//平年的天数
    }
    return cnt;
}

int main()
{
    while(cin>>day1>>day2)
    cout<<abs(get(day2)-get(day1))+1<<endl;//记得加上abs,以免减出负数来
    //为什么要加上1,20110412,20110422这两个数相减我们很容易计算出来是10,但是要求输出11,所以要加1.
    //因为题目说如果两个日期是连续的我们规定他们之间的天数为两天。
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值