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.

原文地址:https://www.cnblogs.com/yachen/p/1891245.html