正经题解 | 日期间隔计算
2024-05-06 16:21:50
发布于:浙江
72阅读
0回复
0点赞
题目分析
按天累加模拟即可,其中需特判润年中的二月份的天数。
AC代码
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main() {
string date1,date2;
cin >> date1 >> date2;
if (date2 < date1)swap(date1,date2);
int months[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int sy,sd,sm;
sscanf(date1.c_str(),"%d-%d-%d",&sy,&sm,&sd);
int ey,ed,em;
sscanf(date2.c_str(),"%d-%d-%d",&ey,&em,&ed);
int ans = 0;
while(sy != ey || sm != em || sd != ed) {
sd++;
if (sy % 400 == 0 || sy % 4 == 0 && sy % 100 != 0) {
months[1] = 29;
}else {
months[1] = 28;
}
if (sd > months[sm - 1]) {
sd = 1;
sm++;
}
if (sm > 12) {
sm = 1;
sy++;
}
ans++;
}
cout << ans << endl;
return 0;
}
复杂度分析
复杂度为 ,记 为结束日期到开始日期的天数。
这里空空如也
有帮助,赞一个