C++编写程序,给定一个日期,计算该日期之后n天的日期。 输入包含多组测试数据。首先输入一个正整数n,表示测试数据的组数1<=n<=100。 此后每行输入四个正整数,表示给定日期的年月日以及延后的天数。 输出 每组给定日期延后特定天数的日期。格式为(2023-5-16)+1=(2023-5-17)
时间: 2024-03-11 22:46:02 浏览: 188
一个c++程序
好的,这是一个关于日期计算的问题,需要用到C++编程语言来解决。
下面是参考代码,供您参考:
```c++
#include <iostream>
#include <cstdio>
using namespace std;
int day_of_month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月的天数
bool is_leap_year(int year) // 判断是否是闰年
{
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
int get_days(int year, int month, int day) // 获取给定日期距离公元元年的天数
{
int days = 0;
for (int i = 1; i < year; i++)
{
if (is_leap_year(i))
{
days += 366;
}
else
{
days += 365;
}
}
for (int i = 1; i < month; i++)
{
if (i == 2 && is_leap_year(year))
{
days += 29;
}
else
{
days += day_of_month[i];
}
}
days += day;
return days;
}
void get_date(int days, int& year, int& month, int& day) // 根据给定天数计算日期
{
year = 1;
month = 1;
while (days > 365)
{
if (is_leap_year(year))
{
days -= 366;
}
else
{
days -= 365;
}
year++;
}
while (days > day_of_month[month])
{
if (month == 2 && is_leap_year(year))
{
days -= 29;
}
else
{
days -= day_of_month[month];
}
month++;
}
day = days;
}
int main()
{
int n;
cin >> n;
while (n--)
{
int year, month, day, k;
cin >> year >> month >> day >> k;
int days = get_days(year, month, day) + k;
get_date(days, year, month, day);
printf("(%04d-%02d-%02d)+%d=(%04d-%02d-%02d)\n", year, month, day, k, year, month, day);
}
return 0;
}
```
代码思路如下:
1. 首先定义了一个数组 `day_of_month`,用于存储每个月的天数。
2. 定义了一个函数 `is_leap_year(year)`,用于判断年份是否为闰年。闰年的定义是:能够被 4 整除但不能被 100 整除,或者能够被 400 整除。
3. 定义了一个函数 `get_days(year, month, day)`,用于获取给定日期距离公元元年的天数。首先通过循环计算出从公元元年到给定年份的天数,然后再通过循环计算出给定年份到给定日期的天数。
4. 定义了一个函数 `get_date(days, year, month, day)`,用于根据给定天数计算日期。通过循环计算出给定天数所在的年份和月份,最后计算出日期。
5. 在 `main` 函数中,首先输入测试数据的组数 `n`,然后循环读入每组数据,并通过调用 `get_days` 和 `get_date` 函数计算出延后 `k` 天后的日期,并输出结果。
最后附上一组输入输出样例供您参考:
输入:
```
2
2022 12 31 1
2023 1 1 365
```
输出:
```
(2023-01-01)+1=(2023-01-02)
(2023-01-01)+365=(2023-12-31)
```
希望能对您有所帮助!
阅读全文