描述 Description |
|
|
身份证的验证码是这样算的: 比如一个人前17位是这样子的: 35010219801221109 如何算它的验证码? K=∑(A[i]*W[i])(i=2~18) 也就是说K=(A[2]*W[2])+(A[3]*W[3])+...+(A[18]*W[18]) A[i]表示的是从右数到左第i个数(包括验证码在内) 如前面的例子中,最后三位1、0、9,i值分别为4、3、2 A[i]就是编号为i的那个数的字符。如例子中A[2]=9,A[3]=0. 那么W[i]又是什么呢?如图所示
好了,现在就可以算它的K值了。把K除以11所得的余数与下面的表格对照即可知道它的验证码。
|
|
输入数据包含十七位数,即二代身份证号码的前17位数。 |
|
|
|
|
|
输出格式 Output Format |
|
|
二代身份证号码的第18位数,即验证码。 |
样例输入 Sample Input
35010219801221109
样例输出 Sample Output
7
|
|
|
|
10分钟ac,两次提交,第一次忘定义变量l了。。学校服务器fp居然不能编译,害我把测评机当编译器用...
program b1032;
const
w:array[2..18]of integer=(2,4,8,5,10,9,7,3,6,1,2,4,8,5,10,9,7);
ky:array[0..10]of char=('1','0','X','9','8','7','6','5','4','3','2');
var
a:array[1..18]of integer;
i,k,y,l:longint;
s:string;
begin
k:=0;
readln(s);
for i := 2 to 18 do
begin
a[i]:=ord(s[19-i])-48;
k:=a[i]*w[i]+k;
end;
l:=k mod 11;
write(ky[l]);
end.