PAT L1-016. 查验身份证
题目链接
#include <stdio.h>
int w[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
int
f(char a[]) {
int sum = 0;
for( int i = 0; i < 17; i++ ) {
sum += ((a[i] - '0') * w[i]);
}
return sum;
}
int
judge(char a[]) {
int flag = 1;
for( int i = 0; i < 17; i++ ) {
if( !(a[i] >= '0' && a[i] <= '9') ) {
flag = 0;
}
}
return flag;
}
int
main() {
char m[11] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int n, j, lflag;
char num[20];
scanf("%d", &n);
lflag = 1;
for( j = 0; j < n; j++ ) {
scanf("%s", num);
if( (!judge(num)) || num[17] != m[f(num) % 11] ) {
printf("%s\n", num);
lflag = 0;
}
}
if( lflag == 1 ) {
printf("All passed\n");
}
return 0;
}