一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入格式

输入第一行给出正整数N(<= 100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出格式

按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出“All passed”。

输入样例1

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输出样例1

12010X198901011234
110108196711301866
37070419881216001X

输入样例2

2
320124198808240056
110108196711301862

输出样例2

All passed

分析:isTrue函数判断身份证号是否正常,如果不正常返回false,判断每一个给出的身份证号,如果不正常,就输出这个身份证号,并且置flag=1表示有不正常的号码,如果所有的号码都是正常,即flag依旧等于0,则输出All passed~在isTrue函数中,先判断前17位是否是数字,如果不是,直接return false,如果是,就将当前字符转化为数字并与a[i]相乘,累加在sum中,对于第18位,如果是X要转化为10~比较b[sum%11]和第18位是否相等,如果相等就返回true,不相等就返回false~

#include <iostream>
using namespace std;
int a[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
int b[11] = {1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2};
string s;
bool isTrue() {int sum = 0;for (int i = 0; i < 17; i++) {if (s[i] < '0' || s[i] > '9') return false;sum += (s[i] - '0') * a[i];}int temp = (s[17] == 'X') ? 10 : (s[17] - '0');return b[sum%11] == temp;
}
int main() {int n, flag = 0;cin >> n;for (int i = 0; i < n; i++) {cin >> s;if (!isTrue()) {cout << s << endl;flag = 1;}}if (flag == 0) cout << "All passed";return 0;
}

1031. 查验身份证(15)-PAT乙级真题相关推荐

  1. 1051. 复数乘法 (15)-PAT乙级真题

    复数可以写成(A + Bi)的常规形式,其中A是实部,B是虚部,i是虚数单位,满足i2 = -1:也可以写成极坐标下的指数形式(R*e(Pi)),其中R是复数模,P是辐角,i是虚数单位,其等价于三角形 ...

  2. 1061. 判断题(15)-PAT乙级真题

    1061. 判断题(15) 判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分. 输入格式: 输入在第一行给出两个不超过100的正整数N和M,分别是学生人数和判断题数量 ...

  3. 1041. 考试座位号(15)-PAT乙级真题

    每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...

  4. 1046. 划拳(15)-PAT乙级真题

    划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...

  5. PAT 1071. 小赌怡情(15)-PAT乙级真题

    常言道"小赌怡情".这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注t个筹码后,计算机给出第二个数.若玩家猜对了,则系统 ...

  6. 1076. Wifi密码 (15)-PAT乙级真题

    下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用wifi,又怕耽误亲们的学习,现将wifi密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请同学们自己作答,每两 ...

  7. 1056. 组合数的和(15)-PAT乙级真题

    给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字.要求所有可能组合出来的2位数字的和.例如给定2.5.8,则可以组合出:25.28.52.58.82.85,它们的和为330. 输入 ...

  8. 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级真题

    卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...

  9. 1006. 换个格式输出整数 (15)-PAT乙级真题

    让我们用字母B来表示"百".字母S表示"十",用"12-n"来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数.例如2 ...

最新文章

  1. python如何安装scrapy库_python2安装scrapy库报错解决方案
  2. 石川es6课程---9、面向对象-基础
  3. Xml xpath samples
  4. 波士顿大学计算机与传媒专业,波士顿大学传媒专业好吗
  5. QTP的那些事--操作excel的函数
  6. python notebooks_Jupyter Notebooks安装及入门
  7. TensorFlow5-监督式机器学习基础知识
  8. (24)Vue.js组件—组件注册
  9. vbox 按照增强工具 centos7
  10. 【总结】Oracle sql 中的字符(串)替换与转换
  11. vc显示jpg,gif图像简单方法
  12. 基于springboot的mysql实现动态切换数据源
  13. java输入法中手写文字的识别_在线手写识别
  14. FFT蝶形算法,IFFT
  15. mysql获取当前时间+1天_mysql获取当前时间,前一天,后一天
  16. python中双重循环_python中双循环
  17. python自学篇——PyGame模块的所有功能函数详解
  18. 【C++基础之十】友元函数和友元类
  19. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器解决方案之CDN内容分发网络
  20. Excel VBA自动化办公:选择Excel文件合并订单数据生成订单汇总表、生成发货单并导出pdf文件、自动统计业绩生成业绩表

热门文章

  1. Android应用中使用及实现系统“分享”接口
  2. 阿里云加入开放媒体联盟AOM 科技巨头联合推广高清视频新标准
  3. Android 资讯类App项目实战 第一章 滑动顶部导航栏
  4. 其他的AdapterView——Spinner
  5. 流量策略和整型--整型篇
  6. 研究员发现macOS 版本Safari 浏览器中的严重漏洞,获奖10.5万美元
  7. 彪马PUMA源代码被盗,称客户数据不受影响
  8. 【BlackHat】速修复!有人正在扫描 Exchange 服务器寻找 ProxyShell 漏洞
  9. D-Link 修复多个硬编码密码漏洞
  10. 谷歌再修复已遭利用的两个高危 Chrome 0day