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 } 

 

转载于:https://www.cnblogs.com/ManOK/p/10272794.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值