
🔥承渊政道: 个人主页
❄️个人专栏: 《C语言基础语法知识》 《数据结构与算法初阶》
✨逆境不吐心中苦,顺境不忘来时路! 🎬 博主简介:

引言:前篇文章,小编已经将我所学的C++类和对象的相关知识介绍完了,俗话说的好,温故知新,可以为师矣.那么本篇文章让我们通过做题全面解析C++类和对象,加深自己对知识的理解!废话不多说,带着这些疑问,下面跟着小编的节奏🎵一起学习吧!
目录
1.选择题(全面解析)
2.编程题(全面解析)
2.1计算日期到天数转换
cpp
#include <iostream>
using namespace std;
// 判断是否为闰年
bool isLeap(int year) {
// 闰年规则:能被4整除且不能被100整除,或能被400整除
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
int year, month, day;
// 输入年、月、日(需确保输入为合法日期)
cin >> year >> month >> day;
int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 闰年则修改2月天数为29
if (isLeap(year)) {
months[1] = 29;
}
// 累加前month-1个月的总天数
int totalDays = 0;
for (int i = 0; i < month - 1; ++i) {
totalDays += months[i];
}
totalDays += day;
// 输出结果
cout << totalDays << endl;
return 0;
}

2.2日期差值
cpp
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
// 判断闰年
bool isLeap(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 计算date(YYYYMMDD)对应的"当年第几天"
int dateToDayOfYear(int date) {
int year = date / 10000;
int month = (date / 100) % 100;
int day = date % 100;
int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (isLeap(year)) {
months[1] = 29;
}
int total = 0;
for (int i = 0; i < month - 1; ++i) {
total += months[i];
}
return total + day;
}
// 计算两个日期(YYYYMMDD)之间的天数差
int dateDiff(int date1, int date2) {
// 确保date1 <= date2,方便计算
if (date1 > date2) {
swap(date1, date2);
}
int year1 = date1 / 10000;
int year2 = date2 / 10000;
int day1 = dateToDayOfYear(date1);
int day2 = dateToDayOfYear(date2);
int total = 0;
// 处理中间完整的年份
for (int y = year1 + 1; y < year2; ++y) {
total += isLeap(y) ? 366 : 365;
}
// 处理year1剩余的天数 + year2已过的天数
if (year1 == year2) {
total = day2 - day1 + 1; // 同一年,直接相减+1(如12到22是11天)
} else {
int daysInYear1 = isLeap(year1) ? 366 : 365;
total += (daysInYear1 - day1 + 1) + day2;
}
return total;
}
int main() {
int date1, date2;
// 多组输入(直到输入结束)
while (cin >> date1 >> date2) {
cout << dateDiff(date1, date2) << endl;
}
return 0;
}

2.3打印日期
cpp
#include <iostream>
using namespace std;
// 判断是否为闰年
bool isLeap(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
int y, n;
// 处理多组输入
while (cin >> y >> n) {
// 平年各月天数(索引0对应1月)
int months[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 闰年修改2月天数
if (isLeap(y)) {
months[1] = 29;
}
int month = 1;
// 推算月份和日期
for (; month <= 12; ++month) {
if (n <= months[month - 1]) {
break;
}
n -= months[month - 1];
}
// 按yyyy-mm-dd格式输出(补前导零)
printf("%04d-%02d-%02d\n", y, month, n);
}
return 0;
}

2.4日期累加
cpp
#include <iostream>
using namespace std;
// 判断闰年
bool isLeap(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 获取指定年、月的天数
int getDays(int year, int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return isLeap(year) ? 29 : 28;
default:
return 0; // 无效月份(实际不会触发)
}
}
int main() {
int m;
cin >> m; // 样例个数
while (m--) {
int y, mon, d, add;
cin >> y >> mon >> d >> add;
d += add; // 累加天数到"日"
// 调整日期至合法范围
while (true) {
int days = getDays(y, mon);
if (d <= days) break; // 日合法,退出循环
d -= days; // 减去当月天数
mon++;
if (mon > 12) { // 月份超12,年份进位
y++;
mon = 1;
}
}
// 按格式输出
printf("%04d-%02d-%02d\n", y, mon, d);
}
return 0;
}

敬请期待下一篇文章内容-->C++内存管理!


































