Language:
ISBN
Description
ISBN码满足:(10*A1+9*A2+..+1*A10) mod 11=0
A10是效验码,若它为10,则以X代替,其它位都为0..9的数字 现在给你一个效验码,但是其中一位看不清,请求出这一位。 Input
1行ISBN码,‘?'表示看不清
Output
输出那一位,无解输-1.
Sample Input 15688?111X Sample Output 1 Source |
这题就是模拟,模拟最重要的是细节,本题值得注意的细节:
1.某1位为0的情况.
2.其它位的乘积和是11的倍数.
3.某1位为X的情况.
4.无解.
5.其它位的乘积和包含'X'.
Program ISBN;
const
n=10;
F=11;
var
s:string;
i,p,ans:longint;
begin
ans:=0;
readln(s);
if s[n]='X' then s[n]:=char(58);
p:=pos('?',s);
for i:=1 to n do
if i<>p then inc(ans,(ord(s[i])-48)*(10-i+1));
// ans +p*? mod 11 =0
ans:=ans mod F;
ans:=(F-ans) mod F;
for i:=0 to n do
begin
if ((11-p)*i) mod F=ans then
begin
if (p=n) and (i=10) then begin writeln('X'); halt; end;
if (i<10) then begin writeln(i); halt; end;
end;
end;
writeln('-1');
end.