【C++初阶】有关日期的编程题

在这里插入图片描述

👦个人主页:@Weraphael
✍🏻作者简介:目前学习C++和算法
✈️专栏:C++航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨


目录

  • 一、计算日期到天数转换
  • 二、日期差值
  • 三、打印日期
  • 四、累加天数

一、计算日期到天数转换

题目链接:点击跳转

在这里插入图片描述

#include <ctime>
#include <iostream>
#include <array>
using namespace std;int Getday(int year, int month)
{array<int, 13> days = {0, 31, 28, 31, 30, 31,30, 31, 31, 30, 31, 30, 31};if (month == 2 && year % 400 == 0){return 29;}if (month == 2 && year % 4 == 0 && year % 100 != 0){return 29;}else {return days[month];}
}int main() 
{int year, month, day;cin >> year >> month >> day;// 遍历 1月 ~ month(不包括month)// 然后再加上当前month的天数即可// 注意还要判断当前年是否是闰年int ans = 0;for (int i = 1; i < month; i++){ans += Getday(year, i);}ans += day;cout << ans << endl;return 0;
}

二、日期差值

题目链接:点击跳转

在这里插入图片描述

#include <iostream>
#include <string>
#include <array>
using namespace std;int Getday(int year, int month)
{array<int, 13> days = {0, 31, 28, 31, 30, 31,30, 31, 31, 30, 31, 30, 31};if (month == 2 && year % 400 == 0){return 29;}if (month == 2 && year % 4 == 0 && year % 100 != 0){return 29;}else {return days[month];}
}bool leap_year(int year)
{if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0){return true;}else {return false;}
}int main()
{int y1, m1, d1;int y2, m2, d2;// 计算两个日期相对于0001 01 01的差值// 然后差值相减取绝对值+1就可以了while (scanf("%4d%2d%2d%4d%2d%2d", &y1, &m1, &d1, &y2, &m2, &d2) != EOF){// 计算y1, m1, d1int ans1 = 0;for (int i = 1; i < y1; i++){if (leap_year(i))ans1 += 366;else ans1 += 365;}for (int i = 1; i < m1; i++){ans1 += Getday(y1, i);}ans1 += d1;// 计算y2, m2, d2int ans2 = 0;for (int i = 1; i < y2; i++){if (leap_year(i))ans2 += 366;else ans2 += 365;}for (int i = 1; i < m2; i++){ans2 += Getday(y2, i);}ans2 += d2;cout << abs(ans1 - ans2) + 1 << endl;}return 0;
}

三、打印日期

题目链接:点击跳转

在这里插入图片描述

#include <iostream>
#include <array>
using namespace std;int Getday(int year, int month)
{array<int, 13> days = {0, 31, 28, 31, 30, 31,30, 31, 31, 30, 31, 30, 31};if (month == 2 && year % 400 == 0){return 29;}if (month == 2 && year % 4 == 0 && year % 100 != 0){return 29;}else {return days[month];}
}int main()
{int year, x;while (cin >> year >> x){// 最低只有1月int month = 1;while (x > Getday(year, month)){x -= Getday(year, month);++month;if (month == 13){++year;month = 1;}}printf("%04d-%02d-%02d\n", year, month, x);}return 0;
}

四、累加天数

题目链接:点击跳转

在这里插入图片描述

#include <iostream>
#include <array>
using namespace std;int Getday(int year, int month)
{array<int, 13> days = {0, 31, 28, 31, 30, 31,30, 31, 31, 30, 31, 30, 31};if (month == 2 && year % 400 == 0){return 29;}if (month == 2 && year % 4 == 0 && year % 100 != 0){return 29;}else {return days[month];}
}int main()
{int m;cin >> m;while (m--){int year, month, day, x;cin >> year >> month >> day >> x;day += x;while (day > Getday(year, month)){day -= Getday(year, month);++month;if (month == 13){year++;month = 1;}}printf("%04d-%02d-%02d\n", year, month, day);}return 0;
}