ac

 •  1天前


include<bits/stdc++.h>

using namespace std;

int coef[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; char check[11] = {'1','0','X','9','8','7','6','5','4','3','2'};

bool isLeap(int y){

return (y%4==0&&y%100!=0)||(y%400==0);

}

int daysInMonth(int y,int m){

if(m==2) return isLeap(y)?29:28;
if(m==4||m==6||m==9||m==11) return 30;
return 31;

}

int main(){

int n; cin>>n;
while(n--){
    string s; cin>>s;
    
    // 1. 检查年份 (位置6-13是出生日期码,其中0-3是年)
    int year = stoi(s.substr(6,4));
    if(year<1980||year>2006){
        cout<<"Y\n";
        continue;
    }
    
    // 2. 检查月份
    int month = stoi(s.substr(10,2));
    if(month<1||month>12){
        cout<<"M\n";
        continue;
    }
    
    // 3. 检查日期
    int day = stoi(s.substr(12,2));
    int maxDay = daysInMonth(year,month);
    if(day<1||day>maxDay){
        cout<<"D\n";
        continue;
    }
    
    // 4. 检查校验码
    int sum=0;
    for(int i=0;i<17;i++){
        sum+=(s[i]-'0')*coef[i];
    }
    char correct = check[sum%11];
    
    if(s[17]!=correct){
        s[17]=correct;
        cout<<s<<"\n";
    }else{
        cout<<"T\n";
    }
}

}


评论:

你是谁


吾用质疑  •  7小时前

请先登录,才能进行评论