题解 | #日期差值#
日期差值
https://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c
#include <iostream>
using namespace std;
int month_day[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
//计算某年的天数
int year_days(int year){
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return 366;
return 365;
}
//距离下一年的天数
int distance_days(int year,int month,int day){
int days = 0;
days += month_day[month] - day;
while(month <= 2 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) ++days;
++month;
while(month <= 12){
days += month_day[month++];
}
return days;
}
//一年已经经过的天数
int past_days(int year,int month,int day){
int days = 0;
days += day;
if(month > 2 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) ++days;
--month;
while(month > 0){
days += month_day[month--];
}
return days;
}
int main() {
int pre_date, last_date;
while (cin >> pre_date >> last_date) {
int days = 0;
//处理日期
int pre_year, last_year, pre_month, last_month, pre_day, last_day;
pre_year = pre_date / 10000;
last_year = last_date / 10000;
pre_date %= pre_year * 10000;
last_date %= last_year * 10000;
pre_month = pre_date / 100;
last_month = last_date / 100;
pre_day = pre_date % (pre_month * 100);
last_day = last_date % (last_month * 100);
//计算天数
if(pre_year == last_year ){
days = year_days(pre_year) - past_days(pre_year,pre_month,pre_day) - distance_days (last_year ,last_month, last_day);
}
else{
days = distance_days(pre_year, pre_month, pre_day);
pre_year++;
while(pre_year < last_year){
days += year_days(pre_year);
++pre_year;
}
days += past_days(last_year, last_month, last_day);
}
++days;
cout << days << endl;
}
}
查看20道真题和解析