#include <stdio.h>
#define LEN_ID 18 /* the length of id */
#define MAX_N 100 /* 最大的人数 */
#define WRONG_ID 1
#define RIGHT_ID 0
int wrongid;
void get_jud_id (int id[MAX_N][LEN_ID]);
void print_result (int id[MAX_N][LEN_ID]);
/*-------------------------- 读取id的每一位 ------------------------------*/
void get_jud_id (int id[MAX_N][LEN_ID])
{
int i, c;
int weight = 0;
static int w[LEN_ID-1] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
static int M[11] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int flag = RIGHT_ID;
for (i = 0; (c = getchar()) != '\n'; ++i) /* 读一个id */
{
id[wrongid][i] = c;
if ( i != (LEN_ID - 1))
{
c -= '0';
if (c >= 0 && c <= 9)
weight += (w[i]*c);
else
flag = WRONG_ID;
}
else
{
if ((flag == RIGHT_ID) && (M[weight % 11] != c))
flag = WRONG_ID;
}
}
if (flag == WRONG_ID) /* 错误的ID */
++wrongid;
}
/*--------------------------- 输出结果 ----------------------------*/
void print_result (int id[MAX_N][LEN_ID])
{
int i, j;
if (wrongid == 0)
printf ("All passed");
else
{
for (i = 0; i < wrongid; ++i)
{
for (j = 0; j < LEN_ID; ++j)
putchar (id[i][j]);
printf("\n");
}
}
}
/*-------------------------------------------------------------------*/
int main ()
{
int N;
int id[MAX_N][LEN_ID];
int i;
scanf ("%d", &N);
getchar(); /* 读掉N后面的\n */
wrongid = 0;
for (i = 0; i < N; ++i)
get_jud_id (id);
print_result (id);
return 0;
}
【PAT B1031】查验身份证(C语言)
最新推荐文章于 2023-12-19 09:12:07 发布