您好,欢迎来到爱够旅游网。
搜索
您的当前位置:首页日期差值(c++)

日期差值(c++)

来源:爱够旅游网

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

输入格式

输入包含多组测试数据。

每组数据占两行,分别表示两个日期,形式为 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.
    //因为题目说如果两个日期是连续的我们规定他们之间的天数为两天。
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务