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 } 

 

posted @ 2019-01-15 16:43  focusDing  阅读(464)  评论(0编辑  收藏  举报