关于#c语言#的问题,如何解决?

7-5 2908 算日期
分数 100

今天是2024年5月18日,给定今年的某一个日期,输出该日期与今天相隔多少天?

输入格式:
输入有多组,每组为一个日期,格式是mm/dd,如10/01。

输出格式:
每行一个数,表示5月18日与这一天相隔的天数。

输入样例:
10/01
06/01
输出样例:
136
14
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

回答不易,求求您点赞关注哦

这是一个 C 语言的解决方案,它将格式为“mm/dd”的日期作为输入,并输出该日期与 2024 年 5 月 18 日之间的天数:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Returns the number of days in a month
int days_in_month(int month) {
  if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
    return 31;
  } else if (month == 4 || month == 6 || month == 9 || month == 11) {
    return 30;
  } else if (month == 2) {
    return 28;
  } else {
    printf("Invalid month\n");
    exit(1);
  }
}

int main(void) {
  char date[5]; // input date in the format "mm/dd"
  int month, day;

  while (scanf("%s", date) == 1) {
    // Extract month and day from the input string
    month = atoi(strtok(date, "/"));
    day = atoi(strtok(NULL, "/"));

    // Check if the input date is valid
    if (month < 1 || month > 12 || day < 1 || day > days_in_month(month)) {
      printf("Invalid date\n");
      continue;
    }

    // Calculate the number of days between the input date and May 18, 2024
    int days = 0;
    for (int i = 5; i < month; i++) {
      days += days_in_month(i);
    }
    days += day - 18;

    printf("%d\n", days);
  }

  return 0;
}

您可以使用 C 编译器(例如 GCC)编译和运行该程序。例如:

gcc -o days days.c
./days

然后,您可以输入要检查的日期,每行一个,程序将输出每个日期与 2024 年 5 月 18 日之间的天数。

例如:

$ ./days
10/01
06/01
136
14

代码实现如下,望采纳

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define GetMonthDays(year, month) ((month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)? 31:((month==2)? ((((year)%4==0) && ((year)%100!=0)) || ((year)%400==0))? 29:28:30))

struct Date {
    int year;
    int month;
    int day;
}
;

void InputDate(struct Date* date) {
    char str[12];
    scanf("%s", str);
    date->month = atoi(str);
    date->day = atoi(str+3);
}

int CalcPassedDays(struct Date* date) {
    int i;
    int days = 0;
    for (i=2024; i>date->year; i--) {
        days += (i%4==0 && i%100!=0 || i%400==0)? 366:365;
    }
    for (i=5; i>date->month; i--) {
        days -= GetMonthDays(date->year, i);
    }
    days -= date->day;
    return days;
}

int main(void) {
    struct Date date;
    date.year = 2024;
    while(1) {
        InputDate(&date);
        printf("%d\n", CalcPassedDays(&date));
    }
    return 0;
}

仅供参考!希望对你有帮助

img

#include <stdio.h>
#define N 5

int main(void)
{
    int mons[13] = {
        0, 31, 60, 91, 121,
        152, 182, 213, 244,
        274, 305, 335, 31};

    struct
    {
        int m;
        int d;
        int days;
    } day[N];

    day[0].m = 5;
    day[0].d = 18;
    day[0].days = 139;

    int i = 1;

    while (i < N && (scanf("%d/%d", &day[i].m, &day[i].d) == 2 ))
    {
        day[i].days = mons[day[i].m - 1] + day[i].d - 139;
        i++;
    }
    puts("");
    for (int j = 1; j < i; j++)
        printf("%d\n", day[j].days);

    return 0;
}