回 帖 发 新 帖 刷新版面

主题:pascal 怎寫輸入H123456 出2??

我們將身份證號碼中第一部分的英文字母,按字母的次序轉換成一個數字。例如:“A” 就轉成 “1”,“B” 就轉成 “2”,其餘的如此類推。然後將身份證號碼中的每一個數字(包括由字母轉換成的數字),由左至右,分別乘以 8、7、6、5、4、3、2 等數值,並將結果加起來。(如果身份證號碼有 2 個英文字母,則第一個字母應該乘以 9,其他數字則同上。)


例如:在例子中的身份證號碼,如果不理括號裏面的數字,應該是 “H123456”。先將 “H” 轉換成 8,然後由左至右乘以上述的倍數並求和,


得8 * 8 + 1 * 7 + 2 * 6 + 3 * 5 + 4 * 4 + 5 * 3 + 6 * 2 = 141

跟著就按以下的步驟計算出括號中的數字:先將上述的總和除以 11,如果整除,那麼括號內的數字就等於 0;如果有餘數,那麼就將 11 減該餘數,所得的差就是括號內的數字了。萬一那個差等於 10,就將括號內的數字定為 “A”。

例如:在上面的例子中,我們將 141 除以 11,得餘數 9,所以括號中的數字就等於 11 - 9 = 2,整個身份證號碼就變成 “H123456(2)” 了。
pascal 怎寫輸入H123456 出2??

回复列表 (共3个回复)

沙发

program try;
var st:string;
    ans,i:longint;
begin
  readln(st);
  ans:=0;
  for i:=1 to length(st) do
    if upcase(st[i]) in ['A'..'Z'] then ans:=ans+(ord(upcase(st[i]))-ord('A')+1)*(9-i)
                                   else ans:=ans+(ord(st[i])-ord('0'))*(9-i);
  if 11-ans mod 11=11 then writeln(st,'(A)') else writeln(st,'(',(11-ans mod 11) mod 11,')');
end.

板凳

{按照楼上的程序修改的,应该对吧}
var st:string;
    ans,i:longint;
begin
  readln(st);
  ans:=0;
  for i:=1 to length(st) do
    if upcase(st[i]) in ['A'..'Z'] 
      then ans:=ans+(ord(upcase(st[i]))-ord('A')+1)*(length(st)+1-i)
      else ans:=ans+(ord(st[i])-ord('0'))*(length(st)+1-i);
  if (11-ans mod 11) mod 11=10 writeln(st,'(A))
    else writeln(st,'(',(11-ans mod 11) mod 11,')');
end.

3 楼

搞错了....忘了输出A...幸亏楼上提醒。...

我来回复

您尚未登录,请登录后再回复。点此登录或注册