CAT 1031 身份验证数组与字符处理
来源:互联网 发布:开淘宝网 编辑:程序博客网 时间:2024/05/17 01:45
1031. 查验身份证(15)
时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
一个合法的身份证号码由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:432012419880824005612010X19890101123411010819671130186637070419881216001X输出样例1:
12010X19890101123411010819671130186637070419881216001X输入样例2:
2320124198808240056110108196711301862输出样例2:
All passed
提交代码
#include <iostream>#include<string.h>#include<cstdio>using namespace std;int d[17]= {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};char c[12]="10X98765432";bool valid(char s[18]){ int sum=0; for(int i=0; i<=16; i++) { if(s[i]<'0'||s[i]>'9') { return false; break; } sum+=(s[i]-'0')*d[i]; } sum%=11; if(c[sum]==s[17]) return true; else return false;}int main(){ char s[18]; int n; cin>>n; int m=n; getchar(); int cnt=0; while(n--) { cin>>s; if(valid(s)) cnt++; else printf("%s\n",s); } if(cnt==m) printf("All passed\n"); return 0;}
这次算是真正的懂得了,虽然很简单,但是之前好多细节还是没注意到,导致一直答案错误或者测试仅仅给1分的尴尬
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
初中奥数辅导网
历史学科网初中
数学学习网初中
初中地理网
初中语文辅导网京翰
初中物理网
初中物理教案网
初中诗句
古诗词初中
初中古诗词
古诗大全初中
初中语文诗
初中的诗
深圳中学初中部
国产小学初中1000部
重庆一中初中部有几个校区
川师大附中初中部
北工大附中初中部
深大附中初中部
常平中学初中部
国际学校初中部
西安龙门学校初中部
云南师大附中初中部
华师大二附中初中部
罗湖外语学校初中实验部
深圳实验学校初中部
石家庄精英中学初中部
郑州外国语中学初中部
福景外国语学校初中部
江西省师大附中初中部
大连枫叶国际学校初中部地址
南昌外国语学校初中部
林初九
初九
医妃林初九
初九popo
十月初九
初九女主
太初九元
恋初九脚免费观看
权宠医妃林初九