首页 > 试题广场 >

[NOIP2008]ISBN号码

[编程题][NOIP2008]ISBN号码
  • 热度指数:25043 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 50M,其他语言100M
  • 算法知识视频讲解
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。


输入描述:
只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。


输出描述:
共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
示例1

输入

0-670-82162-4

输出

Right
示例2

输入

0-670-82162-0

输出

0-670-82162-4
s = input()
a = [int(i) for i in list(s[:-1].replace("-",""))]
b = [i for i in range(1,10)]
c = [x*y for x,y in zip(a,b)]
if str(sum(c)%11) == s[-1]:
    print("Right")
elif sum(c)%11 == 10:
    if s[-1]=="X":
        print("Right")
    else:
        print(s[:-1]+"X")
else:
    print(s[:-1]+str(sum(c)%11))

编辑于 2024-02-04 13:16:43 回复(0)
a=input()
s=a.split('-')
new_lis=[]
sum=0
the_last=''
for i in s:
    for j in i:
        new_lis.append(j)
for i in range(0,9):
    sum+=(i+1)*int(new_lis[i])
if sum%11==10:
    the_last='X'
else:
    the_last=str(sum%11)
if the_last==new_lis[-1]:
    print('Right')
else:
    print(a[:-1]+the_last)


发表于 2022-11-23 11:00:00 回复(0)