Tyvj P1032 Begin2 - Unit1 - 身份验证

描述 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所得的余数与下面的表格对照即可知道它的验证码。

输入格式 Input Format
 
  输入数据包含十七位数,即二代身份证号码的前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.



 

你可能感兴趣的:(it)