机试指南 日期类问题 例2.3 日期差值

本文介绍了一段使用C++编写的代码,用于计算两个日期之间的天数差。通过预处理从公元0年至5000年的每一天的天数,代码能够快速准确地给出任意两个日期间的天数差,特别适用于需要频繁进行日期计算的应用场景。

题目描述

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

输入描述:

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

输出描述:

每组数据输出一行,即日期差值
示例1

输入

20110412
20110422

输出

11

 1 #include<stdio.h>
 2 #include<iostream>
 3 using namespace std;
 4 #define ISyear(x) x%100!=0&&x%4==0 || x%400==0 ? 1:0
 5 //定义宏判断是否是闰年,方便计算每月天数
 6 int dayOfMonth[13][2]=
 7 {
 8     0,0,
 9     31,31,
10     28,29,
11     31,31,
12     30,30,
13     31,31,
14     30,30,
15     31,31,
16     31,31,
17     30,30,
18     31,31,
19     30,30,
20     31,31,
21 };
22 struct Date
23 {
24     int day;
25     int month;
26     int year;
27     void nextday()
28     {
29         day++;
30         if(day>dayOfMonth[month][ISyear(year)])
31         {
32             day=1;
33             month++;
34             if(month>12)
35             {
36                 month=1;
37                 year++;
38             }
39         }
40     }
41 };
42 int buf[5001][13][32]; //保存预处理的天数
43 int Abs(int x)
44 {
45     x<0 ? -x:x;
46 }
47 int main()
48 {
49     Date temp;
50     int cnt=0;
51     temp.day=1;
52     temp.month=1;
53     temp.year=0;
54     while(temp.year!=5001)
55     {
56         buf[temp.year][temp.month][temp.day]=cnt;
57         temp.nextday();
58         cnt++;
59     }
60     int d1,m1,y1;
61     int d2,m2,y2;
62     while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF)
63     {
64         scanf("%4d%2d%2d",&y2,&m2,&d2);
65         cout<<buf[y2][m2][d2]-buf[y1][m1][d1]+1<<endl;
66     }
67 }
View Code

 

转载于:https://www.cnblogs.com/qing123tian/p/11153675.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值