博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT乙级1031
阅读量:4970 次
发布时间:2019-06-12

本文共 1469 字,大约阅读时间需要 4 分钟。

题目链接

https://pintia.cn/problem-sets/994805260223102976/problems/994805290334011392

题解

emmm。对于每个身份证号,判断前17位是否合法,并计算其与对应权重积之和,最后判断校验位是否合法。

// PAT BasicLevel 1031// https://pintia.cn/problem-sets/994805260223102976/problems/994805290334011392#include 
#include
using namespace std;int main(){ // 正确校验码 char M[] = { '1','0','X','9','8','7','6','5','4','3','2'}; // 前17位的比重 int weight[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; // 身份证号个数 int n; cin >> n; // 前17位乘以权重之和 int sum; // 合法身份证号的个数 int legalCount=0; // 当前身份证号是否合法 bool isLegal; // 当前身份证号 string str; // 获取每个身份证号并判断 for(int i=0;i
> str; // 初始化 sum=0; isLegal=true; // 计算前17位乘以权重之和并判断前17位合法性 for(int i=0;i<17;++i){ if (isdigit(str[i])){ sum += (str[i] - '0')*weight[i]; } // 出现非数字,非法,结束sum的计算 else{ isLegal=false; break; } } // 如果前17位合法,判断校验码是否合法 if(isLegal){ isLegal = (M[sum % 11]==str[17]); } // 身份证号非法则输出 if(!isLegal){ cout << str << endl; } // 合法则计数 else{ legalCount++; } } // 全部身份证号合法 if(legalCount==n){ cout << "All passed"; } //system("pause"); return 0;}

作者:

转载请注明出处:

欢迎讨论和交流!


转载于:https://www.cnblogs.com/chouxianyu/p/11318628.html

你可能感兴趣的文章
优化MySQL数据库性能的八大“妙手
查看>>
弧长的参方程表示形式
查看>>
SpringMvc-ModelAndView 结果出不来 显示路径问题 解决办法
查看>>
PL/SQL developer(绿色版)安装及配置
查看>>
在Eclipse中安装svn,JD等插件
查看>>
有关查询和执行计划的DMV 从而明确那些SQL要优化
查看>>
IOS开发系列之阿堂教程:玩转IPhone客户端和Web服务端交互(客户端)实践
查看>>
Java--基本数据类型与变量
查看>>
[转载]IO多路复用之epoll总结
查看>>
poj 2761 Feed the dogs (treap树)
查看>>
sql插入oracle链接的数据
查看>>
语言-英语-美国英语:美国英语
查看>>
7、适配器模式
查看>>
Mac配置本地hadoop
查看>>
矩阵NumPy
查看>>
ES6 完全使用手册
查看>>
webpack4.0打包总结
查看>>
理解ThreadLocal —— 一个map的key
查看>>
Linux下 编译lib3ds库
查看>>
VIM正则表达式。
查看>>