L1-016. 查验身份证
思路:
设置一个二维字符数组用储存N个身份证号码,设置一个标识用来判断N个身份证号码中是否全部正确,然后逐个对每个身份证号码进行判断。
(1)判断前17位是否全部是数字,不是直接输出,跳到下一个。
(1)满足要求:(2)先加权求和,结果再对11求余,然后用switch语句判断最后一个数值是否满足要求;满足跳到下一个,否则输出。
(3)若全部判断完,若全部正确,输出All passed。
注意点:
1.定义求和sum为整形,直接加权求和,不用除以100,不是加权平均。
2.可以直接以不满足要求的个数为标识;
1 #include<stdio.h> 2 int main() 3 { 4 int N; 5 char id[100][20]; 6 scanf("%d",&N); 7 int i; 8 for(i=0;i<N;i++)scanf("%s",id[i]); 9 int er; 10 er=0; 11 for(i=0;i<N;i++) 12 { 13 int sum,j; 14 sum=0; 15 for(j=0;j<17;j++) 16 { 17 if(id[i][j]<48||id[i][j]>57) 18 { 19 er++; 20 printf("%s\n",id[i]); 21 goto next; 22 } 23 } 24 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; 25 //sum=sum/100; 26 switch((sum%11)) 27 { 28 case 0: 29 if(id[i][17]!='1') 30 { 31 printf("%s\n",id[i]); 32 er++; 33 } 34 break; 35 case 1: 36 if(id[i][17]!='0') 37 { 38 printf("%s\n",id[i]); 39 er++; 40 } 41 break; 42 case 2: 43 if(id[i][17]!='X') 44 { 45 printf("%s\n",id[i]); 46 er++; 47 } 48 break; 49 case 3: 50 if(id[i][17]!='9') 51 { 52 printf("%s\n",id[i]); 53 er++; 54 } 55 break; 56 case 4: 57 if(id[i][17]!='8') 58 { 59 printf("%s\n",id[i]); 60 er++; 61 } 62 break; 63 case 5: 64 if(id[i][17]!='7') 65 { 66 printf("%s\n",id[i]); 67 er++; 68 } 69 break; 70 case 6: 71 if(id[i][17]!='6') 72 { 73 printf("%s\n",id[i]); 74 er++; 75 } 76 break; 77 case 7: 78 if(id[i][17]!='5') 79 { 80 printf("%s\n",id[i]); 81 er++; 82 } 83 break; 84 case 8: 85 if(id[i][17]!='4') 86 { 87 printf("%s\n",id[i]); 88 er++; 89 } 90 break; 91 case 9: 92 if(id[i][17]!='3') 93 { 94 printf("%s\n",id[i]); 95 er++; 96 } 97 break; 98 case 10: 99 if(id[i][17]!='2') 100 { 101 printf("%s\n",id[i]); 102 er++; 103 } 104 break; 105 } 106 next:; 107 } 108 if(er==0)printf("All passed\n"); 109 return 0; 110 }