神 • 1天前
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";
}
}
}
评论:
请先登录,才能进行评论