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