中华人民共和国公民的身份证号码由 $18$ 位数字或 $X$ 组成,其中最后一位可能是 $X$。
身份证号码的前 $6$ 位表示行政区划代码,第 $7$ 位到第 $14$ 位表示出生日期,第 $15$ 位到第 $17$ 位表示顺序码,第 $18$ 位表示校验码。
现给定若干个身份证号,请检验身份证号是否合法。如果合法,输出 YES
,否则输出 NO
。
保证前 $17$ 位数字合法,因此你只需要检验第 $18$ 位校验码是否合法即可。
校验码的计算方法如下:
共 $n+1$ 行。
第一行一个正整数 $n$ ,保证 $1\le n \le 50$ 。
接下来 $n$ 行,每一行为一个身份证号。(若最后一位为 $X$,则为大写字母 X
)
输出 $n$ 行。
每行表示身份证号码是否合法。如果合法,输出 YES
,否则输出 NO
。
2
371311200312247819
130631197601191234
YES
NO
在计算系数相乘结果之和时,除了直接写出表达式以外,我们也可以采用 “数组+循环” 的方式。
假设需要计算 $3×5+9×7+4×9$
我们可以直接写 sum = 3*5+9*7+4*9;
同时,我们也可以写成
int a[3] = {3,9,4};
int b[3] = {5,7,9};
int sum = 0;
for (int i = 0; i < 3; ++i)
{
sum += (a[i] * b[i]);
}
看似代码量变大了,但如果需要计算 $17$ 个系数相乘结果之和时,“数组+循环”的方法或许会更便捷且不易出错。