您的位置:首页 > 其它

PAT-团体程序设计天梯赛-L1-016. 查验身份证

2018-01-17 23:17 267 查看
题目链接
思路:设置一个二维字符数组用储存N个身份证号码,设置一个标识用来判断N个身份证号码中是否全部正确,然后逐个对每个身份证号码进行判断。(1)判断前17位是否全部是数字,不是直接输出,跳到下一个。(1)满足要求:(2)先加权求和,结果再对11求余,然后用switch语句判断最后一个数值是否满足要求;满足跳到下一个,否则输出。(3)若全部判断完,若全部正确,输出All passed。注意点:1.定义求和sum为整形,直接加权求和,不用除以100,不是加权平均。2.可以直接以不满足要求的个数为标识;#include<stdio.h>
int main()
{
int N;
char id[100][20];
scanf("%d",&N);
int i;
for(i=0;i<N;i++)scanf("%s",id[i]);
int er;
er=0;
for(i=0;i<N;i++)
{
int sum,j;
sum=0;
for(j=0;j<17;j++)
{
if(id[i][j]<48||id[i][j]>57)
{
er++;
printf("%s\n",id[i]);
goto next;
}
}
sum=(id[i][0]-48)*7+(id[i][1]-48)*9+(id[i][2]-48)*10+(id[i][3]-48)*5+(id[i][4]-48)*8+(id[i][5]-48)*4+(id[i][6]-48)*2+(id[i][7]-48)*1+(id[i][8]-48)*6+(id[i][9]-48)*3+(id[i][10]-48)*7+(id[i][11]-48)*9+(id[i][12]-48)*10+(id[i][13]-48)*5+(id[i][14]-48)*8+(id[i][15]-48)*4+(id[i][16]-48)*2;
//sum=sum/100;
switch((sum%11))
{
case 0:
if(id[i][17]!='1')
{
printf("%s\n",id[i]);
er++;
}
break;
case 1:
if(id[i][17]!='0')
{
printf("%s\n",id[i]);
er++;
}
break;
case 2:
if(id[i][17]!='X')
{
printf("%s\n",id[i]);
er++;
}
break;
case 3:
if(id[i][17]!='9')
{
printf("%s\n",id[i]);
er++;
}
break;
case 4:
if(id[i][17]!='8')
{
printf("%s\n",id[i]);
er++;
}
break;
case 5:
if(id[i][17]!='7')
{
printf("%s\n",id[i]);
er++;
}
break;
case 6:
if(id[i][17]!='6')
{
printf("%s\n",id[i]);
er++;
}
break;
case 7:
if(id[i][17]!='5')
{
printf("%s\n",id[i]);
er++;
}
break;
case 8:
if(id[i][17]!='4')
{
printf("%s\n",id[i]);
er++;
}
break;
case 9:
if(id[i][17]!='3')
{
printf("%s\n",id[i]);
er++;
}
break;
case 10:
if(id[i][17]!='2')
{
printf("%s\n",id[i]);
er++;
}
break;
}
next:;
}
if(er==0)printf("All passed\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: