luogu#P7379. [COCI2018-2019#6] Lun

[COCI2018-2019#6] Lun

题目描述

现有一个判断某种银行卡号是否合法的算法:

  1. 从倒数第二位开始从右往左,每隔一个数位就将其乘 22,否则保留原数位不变。
  2. 将被乘 22 的数位分别计算其数位之和。
  3. 计算经过操作之后的所有数位之和,并将其乘 99 再对 1010 取模,检验其是否等于最后一位(即银行卡号的校验码)。

若待验证卡号为 7992739871379927398713,则判断方法如下:

银行卡号各数位 77 99 22 77 33 99 88 77 11 33
每隔一位乘 22(从倒数第二位开始向左) 77 18\red {18} 99 4\red 4 77 6\red 6 99 16\red {16} 77 2\red 2 -
计算得到的数位和并累加 9\green 9 44 66 7\green 7 22 =67=67

将得到的和 676799 再对 1010 取模,得到 67×9mod10=367 \times 9 \bmod 10=3。其中 33 为该银行卡号校验码,因此原卡号合法。

现有一个缺失一个数位的银行卡号,请根据上述算法在缺失数位处补充一个合适的数位,使得得到的银行卡号合法。

输入格式

第一行输入整数 NN,表示缺失数位的银行卡号的长度。

第二行有一个长度为 NN 的字符串,表示银行卡号。该字符串中只包含数位 090 \sim 9 和字符 x。字符 x 将且仅将出现一次,表示缺失的数位。

输出格式

输出符合题意的数位。如果有多种符合题意的数位,则输出最小的。

11
7992739871x
3
5
x2464
5
10
93380x1696
1

提示

数据规模与约定

对于 50%50\% 的数据,缺失的数位位于银行卡号校验码处,即字符 x 位于字符串最后一位。

对于 100%100\% 的数据,1N1001 \le N \le 100

说明

本题分值按 COCI 原题设置,满分 5050

题目译自 COCI2018-2019 CONTEST #6 T1 Lun