UVA333 Recognizing Good ISBNs
题目描述
当今,大多数的书本都有一个互不相同的编号。ISBN(International Standard Book Number,国际标准书号)是一个十位十进制整数,但是在某些情况下,它的最后一位可能是 $\text X$。为了便于阅读,连字符可能出现在 ISBN 的一些位置,但是没有其它用途了。样例输入和样例输出展示了一些合法的 ISBN 号码和一些不合法的 ISBN 号码。
实际上,只有 ISBN 号码的前九位用来标识一本书。第十个字符是用来检验 ISBN 号码是否正确的。这个校验位是通过一些方法计算出来的,从而保证通过以下算法,最终结果模 $11$ 为 $0$。这个数字可能是 $10$,此时 ISBN 的设计者使用了一个特殊符号 $\text X$ 来代表 $10$。
检验 ISBN 的方法相对简单。两个和,$s1$ 和 $s2$(译注:可能表示为 $s_1$ 和 $s_2$ 更好一些,但是原文如此),基于 ISBN 号码来计算。其中 $s1$ 是前缀和,$s2$ 是 $s1$ 和。如果最终的 $s2$ 是 $11$ 的倍数,则 ISBN 是正确的。
举个例子:考虑一个(正确的)ISBN 号码 $\text{0-13-162959-X}$(Tanenbaum 的计算机网络书籍),首先计算 $s1$:
| 编号 | $1$ | $2$ | $3$ | $4$ | $5$ | $6$ | $7$ | $8$ | $9$ | $10$ |
|:----|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
| ISBN 中的数码 | $0$ | $1$ | $3$ | $1$ | $6$ | $2$ | $9$ | $5$ | $9$ | $10(\text X)$|
| 前缀和 | $0$ | $1$ | $4$ | $5$ | $11$ | $13$ | $22$ | $27$ | $36$ | $46$ |
在 $s1$ 计算完毕之后,计算 $s2$:
| 编号 | $1$ | $2$ | $3$ | $4$ | $5$ | $6$ | $7$ | $8$ | $9$ | $10$ |
|:----|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
| $s2$(求和) | $0$ | $1$ | $5$ | $10$ | $21$ | $34$ | $56$ | $83$ | $119$ | $165$ |
我们现在就可以根据 $165$ 检验 ISBN 的正确性了。的确,$165$ 是 $11$ 的倍数。
输入格式
输入数据会包含若干行的候选 ISBN 号码,每行一个。也许在开头/结尾会有一些多余空格,此时需要忽略。没有行会包含超过 $80$ 个字符,但是可能会包含不合法字符,或者比 $10$ 个更少/更多的数码。正确的 ISBN 可能会在任意位置包含连字符 `-`,输入数据的结束表示是输入文件的结尾。
输出格式
对于每个 ISBN 号码输出一行,代表这个 ISBN 号码是否合法。下面的例子展示了正确的格式。
说明/提示
翻译来自[@LionBlaze](https://www.luogu.com.cn/user/911054)。