ISBN 号码——蓝桥杯

news/2025/2/3 14:48:09/

1.题目描述

每一本正式出版的图书都有一个 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

输出

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

2.代码

#include <iostream>
#include<string>
using namespace std;
int main()
{string s;getline(cin,s);//输入int sum=0;int j=1;for(int i=0;i<=10;i++)//求和{if(s[i]!='-'){sum+=(s[i]-'0')*j;j++;}}int a=sum%11;//取模if(a==10)//如果a=10,要变为‘X’{a='X';}else//其他情况下,变为字符串类型,方便后续操作{a=a+'0';}if(a==s[12])//判断并输出结果{cout<<"Right"<<endl;}else {s[12]=a;cout<<s<<endl;}return 0;
}

3.代码解析

输入部分
string s;
getline(cin, s);
  • 使用 getline 从标准输入读取一行字符串,存储到变量 s 中。这允许输入包含空格的字符串,但在这个场景下,输入应该是一个13位的字符串(前12位是数字,第13位是校验码)。

初始化变量
int sum = 0;
int j = 1;
int flag = 1;
  • sum 用于存储加权和。

  • j 用于表示权重,从1开始递增。

计算加权和
for (int i = 0; i <= 10; i++) {if (s[i] != '-') {sum += (s[i] - '0') * j;j++;}
}
  • 遍历字符串的前11个字符(索引从0到10)。

  • 如果字符不是 '-',则将其转换为数字(s[i] - '0'),乘以当前权重 j,并累加到 sum 中。

  • 权重 j 每次递增1。

计算校验码

cpp复制

int a = sum % 11;
if (a == 10) {a = 'X';
} else {a = a + '0';
}
  • 计算加权和 sum 对11取模的结果。

  • 如果结果是10,则校验码为 'X'

  • 否则,将结果转换为字符(a + '0')。

验证校验码
if (a == s[12]) {cout << "Right" << endl;
} else {s[12] = a;cout << s << endl;
}
  • 如果计算出的校验码 a 与输入字符串的第13个字符(索引为12)相同,则输出 "Right"

  • 否则,将计算出的校验码赋值给字符串的第13个字符,并输出修正后的字符串。


 


http://www.ppmy.cn/news/1568977.html

相关文章

docker desktop使用ollama在GPU上运行deepseek r1大模型

一、安装docker 安装WSL打开Hyper V 可以参考&#xff1a;用 Docker 快速安装软件_哔哩哔哩_bilibili 二、拉取ollama镜像 在powershell中运行如下命令&#xff0c;即可拉取最新版本的ollama镜像&#xff1a; docker pull ollama/ollama 如果需要指定版本&#xff0c;可以…

Kanass快速安装配置教程(入门级)

Kanass是一款国产开源免费的项目管理工具&#xff0c;工具简洁易用、开源免费&#xff0c;本文将介绍如何快速安装配置kanass&#xff0c;以快速上手。&#xfeff; 1、快速安装 1.1 Linux 安装 点击官网 -> 演示与下载 ->下载&#xff0c;下载Linux安装包&#xff0c;…

JavaFX - 事件处理

在 JavaFX 中&#xff0c;我们可以开发 GUI 应用程序、Web 应用程序和图形应用程序。在此类应用程序中&#xff0c;每当用户与应用程序 &#xff08;节点&#xff09; 交互时&#xff0c;都会称其发生了事件。 例如&#xff0c;单击按钮、移动鼠标、通过键盘输入字符、从列表中…

springboot中路径默认配置与重定向/转发所存在的域对象

Spring Boot 是一种简化 Spring 应用开发的框架&#xff0c;它提供了多种默认配置和方便的开发特性。在 Web 开发中&#xff0c;路径配置和请求的重定向/转发是常见操作。本文将详细介绍 Spring Boot 中的路径默认配置&#xff0c;并解释重定向和转发过程中存在的域对象。 一、…

原生 Node 开发 Web 服务器

一、创建基本的 HTTP 服务器 使用 http 模块创建 Web 服务器 const http require("http");// 创建服务器const server http.createServer((req, res) > {// 设置响应头res.writeHead(200, { "Content-Type": "text/plain" });// 发送响应…

论文阅读(十四):贝叶斯网络在全基因组DNA甲基化研究中的应用

1.论文链接&#xff1a;Bayesian Networks in the Study of Genome-wide DNA Methylation 摘要&#xff1a; 本章探讨了贝叶斯网络在基因组规模的脱氧核糖核酸&#xff08;DNA&#xff09;甲基化研究中的应用。它首先描述了DNA甲基化的基因组规模注释的不同实验方法。详细介绍…

【华为OD-E卷 - 磁盘容量排序 100分(python、java、c++、js、c)】

【华为OD-E卷 - 磁盘容量排序 100分&#xff08;python、java、c、js、c&#xff09;】 题目 磁盘的容量单位常用的有M&#xff0c;G&#xff0c;T这三个等级&#xff0c; 它们之间的换算关系为1T 1024G&#xff0c;1G 1024M&#xff0c; 现在给定n块磁盘的容量&#xff0c…

流处理 CompletableFuture

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 掌握&#xff1a;流处理 & CompletableFuture的使用 目录 直接例子看同步和异步处理的区别普通流处理进行批量查询批量查询1&#xff1a;并行流操作批量…