第一次测试&第一篇CSDN日志
2013-06-05 18:04
267 查看
刚注册了CSDN,还不太会用,以前也没有天天写博客的习惯,不过慢慢养成吧!前不久刚完成了12网络 第一次测试的题目,前几题比较简单,最后一题倒是花了不少功夫,现在的我编程能力很差,渐渐从基础题训练吧!
这就是第五题,题目看了3,4遍才看懂!
密码学家亘古教授,破解了居民身份证号的密码,他可以分辨出身份证号的真假,还能猜出你身份证最后一位数字。下面是亘古教授计算身份证号末位的办法
1.计算校验位
∑(id[i]×Sec[i])(mod 11) //身份证前17位乘对应的校验位的和,对11取模
Sec[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}
2.通过校验位得出真实数字
校验位 0 1 2 3 4 5 6 7 8 9 10
真实数字 1 0 X 9 8 7 6 5 4 3 2
亘古教授想请我们HBUT的天才们设计一个程序,当输入身份证号前17位时补全第18位,当输入18位身份证号时验证它的真假
Input
输入17位或者18位长度的N行字符串
Output
当输入的18位身份证为真时输出 True
当输入的18位身份证为假时输出 False
当输入身份证前17位时完整输出该身份证号码
Sample Input
Sample Output
源代码:
刚开始还不明白对11取模是什么意思,现在了解了,是对11求余,嘿嘿,再接再厉吧,ACM编程的新手。。。。
这就是第五题,题目看了3,4遍才看懂!
密码学家亘古教授,破解了居民身份证号的密码,他可以分辨出身份证号的真假,还能猜出你身份证最后一位数字。下面是亘古教授计算身份证号末位的办法
1.计算校验位
∑(id[i]×Sec[i])(mod 11) //身份证前17位乘对应的校验位的和,对11取模
Sec[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}
2.通过校验位得出真实数字
校验位 0 1 2 3 4 5 6 7 8 9 10
真实数字 1 0 X 9 8 7 6 5 4 3 2
亘古教授想请我们HBUT的天才们设计一个程序,当输入身份证号前17位时补全第18位,当输入18位身份证号时验证它的真假
Input
输入17位或者18位长度的N行字符串
Output
当输入的18位身份证为真时输出 True
当输入的18位身份证为假时输出 False
当输入身份证前17位时完整输出该身份证号码
Sample Input
42058319890604001 420583198906040010 42058319890604001X
Sample Output
420583198906040010 True False
源代码:
#include <stdio.h> #include <math.h> int main() { char id[18]; int i,k,idnum[17]; int sec[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; char yan[11]={'1','0','X','9','8','7','6','5','4','3','2'}; while(scanf("%s",&id)!=EOF) { if(id[17]=='\0') { for(i=0;i<17;i++) { switch(id[i]) { case '0':idnum[i]=0;break; case '1':idnum[i]=1;break; case '2':idnum[i]=2;break; case '3':idnum[i]=3;break; case '4':idnum[i]=4;break; case '5':idnum[i]=5;break; case '6':idnum[i]=6;break; case '7':idnum[i]=7;break; case '8':idnum[i]=8;break; case '9':idnum[i]=9;break; } } k=(idnum[0]*7+idnum[1]*9+idnum[2]*10+idnum[3]*5 +idnum[4]*8+idnum[5]*4+idnum[6]*2+idnum[7]*1 +idnum[8]*6+idnum[9]*3+idnum[10]*7+idnum[11]*9 +idnum[12]*10+idnum[13]*5+idnum[14]*8+idnum[15]*4+idnum[16]*2)%11; id[17]=yan[k]; for(i=0;i<18;i++) { printf("%c",id[i]); } printf("\n"); } else { for(i=0;i<17;i++) { switch(id[i]) { case '0':idnum[i]=0;break; case '1':idnum[i]=1;break; case '2':idnum[i]=2;break; case '3':idnum[i]=3;break; case '4':idnum[i]=4;break; case '5':idnum[i]=5;break; case '6':idnum[i]=6;break; case '7':idnum[i]=7;break; case '8':idnum[i]=8;break; case '9':idnum[i]=9;break; } } k=(idnum[0]*7+idnum[1]*9+idnum[2]*10+idnum[3]*5 +idnum[4]*8+idnum[5]*4+idnum[6]*2+idnum[7]*1 +idnum[8]*6+idnum[9]*3+idnum[10]*7+idnum[11]*9 +idnum[12]*10+idnum[13]*5+idnum[14]*8+idnum[15]*4+idnum[16]*2)%11; if(id[17]==yan[k]) printf("True\n"); else printf("False\n"); } } return 0; }
刚开始还不明白对11取模是什么意思,现在了解了,是对11求余,嘿嘿,再接再厉吧,ACM编程的新手。。。。
相关文章推荐
- 开工大吉!(我的第一篇CSDN日志,兼论我的第一次开发综述)
- 测试,我的csdn第一篇日志
- 测试csdn使用WLW发布日志
- <谷歌如何测试> 翻译第一篇
- csdn 第一篇日志
- CSDN博客的第一篇日志
- 2012 CSDN第一篇日志
- NSUserDeafults的关于"第一次登陆"的测试问题
- 测试我用WLW在CSDN上的第一篇博客
- 测试我用WLW在CSDN上的第一篇博客
- 一个创业者&程序员在CSDN的第一篇blogger
- CSDN的第一天&第一次
- CSDN上的第一篇博客,也是第一次写博客
- 第一篇csdn的博客日志
- [原创]CSDN的第一篇日志
- SQL&EF优化第一篇 各种情况下的性能测试之count函数篇
- 第一篇日志。纯测试。
- 在CSDN第一篇日志
- 测试一下用Live Writer发日志到student.csdn
- 纪念CSDN的第一篇日志