题解 | 日期差值
日期差值
https://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c
#include <iostream>
#include <sys/types.h>
using namespace std;
int monthp[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int monthr[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() {
int year1, month1, day1;
int year2, month2, day2;
int a, b;
while (cin >> a >> b) {
if (a > b) {
int temp = a;
a = b;
b = a;
}
year1 = a / 10000;
month1 = (a % 10000) / 100;
day1 = a % 100;
year2 = b / 10000;
month2 = (b % 10000) / 100;
day2 = b % 100;
int sub = 1;//差值
int find = 0;//处理sub
int find1=0;//处理pre
int pre=0;//第一个日期,当年已经经过多少天
if ((year1 % 4 == 0 && year1 % 100 != 0) || year1 % 400 == 0)
for (int i = 1; i <= month1 && find1 == 0; i++)
for (int j = 1; j <= monthr[i] && find1 == 0; j++)
if (!(i == month1 &&j == day1))
pre++;
else find1 = 1;
else
for (int i = 1; i <= month1 && find1 == 0; i++)
for (int j = 1; j <= monthp[i] && find1 == 0; j++)
if (!(i == month1 &&j == day1))
pre++;
else find1 = 1;
//以上旨在计算日期1当年,达到目标月日之前还经过多少天,如一月一就是经过0天,一月二就是过了一天
for (; year1 <= year2; year1++) {
if ((year1 % 4 == 0 && year1 % 100 != 0) || year1 % 400 == 0)
for (int i = 1; i <= 12 && find == 0; i++)
for (int j = 1; j <= monthr[i] && find == 0; j++)
if (!(year1 == year2 && i == month2 &&j == day2))
sub++;
else find = 1;
else
for (int i = 1; i <= 12 && find == 0; i++)
for (int j = 1; j <= monthp[i] && find == 0; j++)
if (!(year1 == year2 && i == month2 &&j == day2))
sub++;
else find = 1;
}
//以上是从日期1的年份的一月一日算起,每加一天,差值++,直到年月日都与日期2相等
//因为是从一月一算起,所以还需要减去当年从一月一到目标月日已经经过的天数
cout<<sub-pre<<endl;
}
}
// 64 位输出请用 printf("%lld")
查看11道真题和解析