输出描述
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,
则输出“All passed”。
输入示例
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
输出示例
12010X198901011234
110108196711301866
37070419881216001X
#include <stdio.h>
#include <string.h>
int main(){
int n;
scanf("%d",&n);
int p[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char m[11]={'1','0','X','9','8','7','6','5','4','3','2'};
int i;
char arr[n][100];
char arrcheck[n];
for(i=0;i<n;i++){
scanf("%s",arr[i]);
}
int sum;
int j,k=0;
for(i=0;i<n;i++){
sum=0;
for(j=0;j<strlen(arr[i])-1;j++){
sum = sum + (arr[i][j]-'0')*p[j];
}
int temp=sum%11;
arrcheck[k]=m[temp];
if(arrcheck[k]!=arr[i][j]){
printf("%s\n",arr[i]);
k++;
}
}
if(k==0){
printf("All passed\n");
}
return 0;
}