#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
// 读取输入的字符串
string s;
cin >> s;
// 初始化有效性标志为1(有效)
int f = 1;
// 定义年、月、日变量
int y, m, d;
// 从字符串中提取年、月、日信息
y = (s[6] - '0') * 1000 + (s[7] - '0') * 100 + (s[8] - '0') * 10 + (s[9] - '0');
m = (s[10] - '0') * 10 + (s[11] - '0');
d = (s[12] - '0') * 10 + (s[13] - '0');
// 检查月份和日期是否有效
if (m < 1 || m > 12 || d <= 0) f = 0;
// 判断并验证日期的有效性,根据不同月份的天数规则
if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
if (d > 31) f = 0;
}
if (m == 4 || m == 6 || m == 9 || m == 11) {
if (d > 30) f = 0;
}
if (m == 2) {
// 验证二月的日期,考虑闰年因素
if (d > 28 + (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)) f = 0;
}
// 根据有效性标志输出结果或错误信息
if (f) cout << y << " " << m << " " << d;
else cout << "error";
return 0;
}
标签:11,10,12,号码,int,long,身份证,1560
From: https://www.cnblogs.com/risnotl/p/18517969