我是小学生 • 1天前
using namespace std;
// 判断年份是否为闰年 bool run(int year) {
if (year % 400 == 0)
return true;
if (year % 100 == 0)
return false;
if (year % 4 == 0)
return true;
return false;
}
// 判断日期是否合法 bool is(int year, int month, int day) {
if (month < 1 || month > 12)
return false;
int days;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
days = run(year) ? 29 : 28;
break;
default:
return false;
}
return (day >= 1 && day <= days);
}
// 将日期转换为8位数字 int toDateNum(int year, int month, int day) {
return year * 10000 + month * 100 + day;
}
int main() {
int start, end;
cin >> start >> end;
int count = 0;
// 枚举前4位(年份),生成回文日期并验证
for (int year = 1000; year <= 9999; ++year) {
// 生成后4位:前4位逆序(year的逆序为月和日)
string yearStr = to_string(year);
reverse(yearStr.begin(), yearStr.end());
int md = stoi(yearStr); // 后4位:month*100 + day
int month = md / 100;
int day = md % 100;
// 验证日期合法性
if (!is(year, month, day)) {
continue;
}
// 转换为8位数字并判断是否在范围内
int dateNum = toDateNum(year, month, day);
if (dateNum >= start && dateNum <= end) {
count++;
}
}
cout << count << endl;
return 0;
}
评论:
请先登录,才能进行评论