1560 身份证号码

#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;
}

posted @ 2024-10-31 15:45  行胜于言Ibl  阅读(48)  评论(0)    收藏  举报