1031 查验身份证 (15 分)
题目链接:1031 查验身份证 (15 分)
这道题目设计字符串处理的基础知识/操作,日后在文章中详细整理。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 5 vector<char[18]> ans; 6 bool Isnum(char c) 7 { 8 if(c>='0'&&c<='9') 9 return true; 10 else 11 return false; 12 } 13 int main() 14 { 15 int n; 16 int sum=0; 17 int weight[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; 18 map<int,char> a; 19 char ID[18]; 20 a[0]='1';a[1]='0';a[2]='X';a[3]='9';a[4]='8';a[5]='7'; 21 a[6]='6';a[7]='5';a[8]='4';a[9]='3';a[10]='2'; 22 cin>>n; //输入身份证的个数 23 bool flag=true; 24 bool coutflag=false; 25 for(int i=0;i<n;i++) 26 { 27 scanf("%s",ID); 28 for(int j=0;j<17;j++) 29 { 30 if(Isnum(ID[j])) 31 sum+=(ID[j]-'0')*weight[j]; 32 else 33 { 34 flag=false; 35 printf("%s\n",ID); 36 coutflag=true; 37 } 38 } 39 if(flag) //没有出错 40 { 41 if(a[sum%11]!=ID[17]) //校验失败 42 { 43 printf("%s\n",ID); 44 coutflag=true; 45 } 46 } 47 flag=true; 48 sum=0; 49 } 50 if(!coutflag) 51 cout<<"All passed"<<endl; 52 53 return 0; 54 }