
👦个人主页:@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;
}