#include #define for_i(i, range, inner) \ { \ int i; \ for (i = 0; i < range; i++) \ inner; \ } typedef struct { int year; int month; int day; } Date; int is_leap_year(int year) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { return 1; } else { return 0; } } int get_day_of_month(int year, int month) { switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: return is_leap_year(year) ? 29 : 28; default: return -1; } } int main() { Date date1, date2; int diff = 0; scanf("%d %d %d", &date1.year, &date1.month, &date1.day); scanf("%d %d %d", &date2.year, &date2.month, &date2.day); for_i(i, date1.month - 1, { diff += get_day_of_month(date1.year, i + 1); }) diff += date1.day - 1; for_i(i, date2.month - 1, { diff -= get_day_of_month(date2.year, i + 1); }) diff -= date2.day - 1; { int year_max = date1.year > date2.year ? date1.year : date2.year; int year_min = date1.year < date2.year ? date1.year : date2.year; int sign = date1.year > date2.year ? 1 : -1; int i; for (i = year_min; i < year_max; i++) { diff += sign * (is_leap_year(i) ? 366 : 365); } } if (diff < 0) { diff = -diff; } printf("%d\n", diff); return 0; }