题解 | #日期差值#
日期差值
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; } }