給定出生日期 YYYY-MM-DD,計算從出生到 20 歲生日(即 YYYY+20-MM-DD)經過的總天數。若 20 歲生日不存在(如 2月29日出生但 20 年後非閏年),輸出 -1。
bool leap(int y) {
return (y%4==0 && y%100!=0) || (y%400==0);
}
leap(y) ? 366 - dayOfYear(y, m, d) : 365 - dayOfYear(y, m, d)。dayOfYear(y+20, m, d)。int monthDay[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int dayOfYear(int y, int m, int d) {
int sum = 0;
for (int i=1;i2 && leap(y)) sum++;
return sum;
}
int main() {
int T; scanf("%d", &T);
while (T--) {
int y,m,d; scanf("%d-%d-%d", &y,&m,&d);
if (m==2 && d==29 && !leap(y+20)) { puts("-1"); continue; }
int sum = 0;
for (int i=1;i<=19;i++) sum += leap(y+i) ? 366 : 365;
sum += leap(y) ? 366 - dayOfYear(y,m,d) : 365 - dayOfYear(y,m,d);
sum += dayOfYear(y+20, m, d);
printf("%d\n", sum);
}
}
1988-03-07 → 7305 天。