Run ID:93176

提交时间:2024-10-12 12:26:38

#include <stdio.h> #include <stdlib.h> // 判断是否为闰年 int isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } // 获取月份的天数 int getDaysInMonth(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 isLeapYear(year) ? 29 : 28; default: return 0; } } // 计算从出生到18岁生日的天数 int calculateDays(int year, int month, int day) { int days = 0;//printf("%d-%d-%d \n",year,month,day); for (int i = year; i <= year + 18; ++i) { //printf("%d:year ---- \n",i); for (int m = 1; m <= 12; ++m) { if (i == year && m < month) { continue; } if (i == year && m == month) { //printf("start month \n"); days += getDaysInMonth(i, m)-day+1; continue; } // if (i == year + 17 && m > month) { // printf("break the month %d\n",m); // break; // } if (i == year + 18 && m == month) { //printf("End month \n"); days += day; break; } //printf("%d:year ----|------------%d \n",i,m); days += getDaysInMonth(i, m); } } // 减去出生当天的天数 //days -= (isLeapYear(year) && month > 2) ? 1 : 0; return days; } int main() { int T, year, month, day; scanf("%d", &T); while (T--) { scanf("%d-%d-%d", &year, &month, &day); int days = calculateDays(year, month, day); if (days <= 0) { printf("-1\n"); } else { printf("%d\n", days); } } return 0; } /* Input 1 1988-03-07 Output 6574 */