Translate
给你两个日期,让你求两个日期之间差多少天,注意闰年
思路
入门的一道题,是一种题形, 普及组回文日期也是这种体型
很容易注意到
- 闰年的 月是 天
- 第一个日期和第二个日期大小不一定
针对日期大小不一定,要写代码特别判断
主要思路:
读入之后,可以从起始年算到结束年,其中月份是
到
月枚举,然后枚举对应天数,计数器每次
可是因为月和日是不确定的,所以判断如果枚举的时间在开始时间~结束时间内,那么计数器就
Code(超级压行)
#include<bits/stdc++.h>
int main(){
int ans = 0, flag = 0, y1, m1, d1, y2, m2, d2, md[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char ch;
std::cin >> y1 >> ch >> m1 >> ch >> d1 >> y2 >> ch >> m2 >> ch >> d2;
if (y1 > y2 || y1 == y2 && m1 > m2 || y1 == y2 && m1 == m2 && d1 > d2)
std::swap(y1, y2) , std::swap(m1, m2) , std::swap(d1, d2);//交换,以上有多种情况
for (int i = y1; i <= y2; i++){
if (i % 100 != 0 && i % 4 == 0 || i % 400 == 0) md[2] = 29;//如果是闰年,那么临时把md[2]改成29
for (int j = 1; j <= 12; j++)
for (int d = 1; d <= md[j]; d++){
if (i == y1 && j == m1 && d == d1) flag = 1;
if (i == y2 && j == m2 && d == d2) flag = 0;//找到符合要求的部分,注意一下细节问题
if (flag) ans++;
}
md[2] = 28;//别忘恢复
}
std::cout<<ans<<std::endl;//输出答案
return 0;
}