输入 输入的第一行是一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。 输出 T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。C语言
时间: 2024-12-11 19:38:34 浏览: 6
正则表达式实现将MM/DD/YYYY格式的日期转换为YYYY-MM-DD格式
在C语言中,你可以通过以下几个步骤来解决这个问题:
1. 定义函数:首先,编写一个计算两个日期之间天数差的辅助函数。这个函数接受两个日期作为输入,并利用`struct`或`time_t`数据结构进行处理。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 计算两个日期之间的天数差
int days_between_dates(char *date1, char *date2) {
struct tm date_format[] = { {0}, {} };
strptime(date1, "%Y-%m-%d", date_format);
strptime(date2, "%Y-%m-%d", date_format);
time_t t1 = mktime(date_format);
time_t t2 = mktime(date_format + 1); // 假设date2比date1晚一天
return difftime(t2, t1) / (60 * 60 * 24);
}
```
2. 主函数处理:接下来,在主函数里读取输入的日期,判断是否过了18岁生日,然后计算天数并输出结果。
```c
int main() {
int T;
scanf("%d", &T);
for (int i = 0; i < T; ++i) {
char input_date[11];
scanf("%s", input_date);
// 转换输入字符串为时间戳并减去出生日期的时间戳
struct tm *birthdate = localtime(&0); // 假设birth_date已初始化为当前年份的1月1日
int birth_year = 1900 + birthdate->tm_year;
int birth_month = birthdate->tm_mon + 1;
int birth_day = birthdate->tm_mday;
if (strcmp(input_date, "1988-03-07") == 0) {
// 如果输入是你给的示例日期,这里直接替换为你实际的出生日期
}
int days_since_birth = days_between_dates("1988-03-07", input_date); // 使用示例日期
if (days_since_birth >= 5999) { // 18岁生日后有5999天
printf("%d\n", -1); // 没有18岁生日
} else if (days_since_birth > 0) {
printf("%d\n", days_since_birth); // 输出天数
}
}
return 0;
}
```
这个程序会读取每个日期,计算出与出生日期的天数差,然后根据条件输出相应的结果。注意,你需要提前定义或获取用户的出生日期。
阅读全文