ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1360. 日期之间隔几天

2022-10-02 11:17:57  阅读:39  来源: 互联网

标签:


1360. 日期之间隔几天

  • 题意 请你编写一个程序来计算两个日期之间隔了多少天。 日期以字符串形式给出,格式为 YYYY-MM-DD,如示例所示。 思路 思路就是,写出一个函数,功能是求出此时这个日期在这一年是第几天 然后 求第一个结果,是用a年的天数,减去a这个日期在a这一年是第几天 求第二个结果,这两个年中隔了多少年 求第三个结果,b这个日期在b这一年是第几天 三个相加就是答案 细节: 闰年和平年 若是同一年的话需要取余 代码 // --------------------- #define N n + 100 #define int long long #define SZ(X) ((int)(X).size()) #define DEBUG(X) cout << #X << ": " << X << typedef pair<int, int> PII; // #undef N // const int N = 1e5 + 10; static int IOS = []() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); return 0; }(); class Solution { public: int daysBetweenDates(string date1, string date2) { if (date1 > date2) swap(date1, date2); int y1, m1, d1, y2, m2, d2; sscanf(date1.c_str(), "%lld-%lld-%lld", &y1, &m1, &d1); sscanf(date2.c_str(), "%lld-%lld-%lld", &y2, &m2, &d2); vector<int> months = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; auto check = [&](int y) { return y % 400 == 0 || (y % 100 && y % 4 == 0); }; auto f = [&](vector<int> months, int y, int m, int d) { if (check(y)) months[2]++; int x = d; for (int i = 1; i <= m - 1; ++i) x += months[i]; return x; }; int x1 = 365 + check(y1) - f(months, y1, m1, d1); int x2 = f(months, y2, m2, d2); int x3 = 0; for (int i = y1 + 1; i <= y2 - 1; ++i) { x3 += (365 + check(i)); } int ans = x1 + x2 + x3; if (y1 == y2) ans %= (365 + check(y1)); return ans; } }; #undef int; // ---------------------

标签:
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有