70 lines
1.8 KiB
C
70 lines
1.8 KiB
C
#include <stdio.h>
|
|
|
|
#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;
|
|
} |