首页 > 试题广场 >

ISBN号码

[编程题]ISBN号码
  • 热度指数:32223 时间限制: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
parts = input().split("-")

# 提取前三部分为整数,校验位保留原始字符串(可能为数字或 'X')
part1, part2, part3 = map(int, parts[:3])
part4 = parts[3]

# 拼接完整的 ISBN 主体部分(前9位数字)
ISBN_number = f"{part1}{part2}{part3}"

# 转换为数字列表,每一位作为单独数字
number_list = list(map(int, list(ISBN_number)))

# 计算校验和
sum_list = 0
for i, num in enumerate(number_list):
    sum_list += num * (i + 1)  # 权重从1到9

# 计算校验位(模11)
result = sum_list % 11
calculated_check_digit = "X" if result == 10 else str(result)  # 如果结果是10,校验位为 'X'

# 生成建议的正确ISBN
correct_ISBN = f"{part1}-{part2}-{part3}-{calculated_check_digit}"

# 校验用户输入的校验位
if part4 == calculated_check_digit:
    print("Right")
else:
    print(f"{correct_ISBN}")

发表于 2024-12-13 21:10:47 回复(0)
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)