news 2026/4/16 14:02:57

洛谷P055-字符串、字符型的应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷P055-字符串、字符型的应用

P1055 [NOIP 2008 普及组] ISBN 号码

题目描述

每一本正式出版的图书都有一个 ISBN 号码与之对应,ISBN 码包括9 99位数字、1 11位识别码和3 33位分隔符,其规定格式如x-xxx-xxxxx-x,其中符号-就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的 ISBN 码。ISBN 码的首位数字表示书籍的出版语言,例如0 00代表英语;第一个分隔符-之后的三位数字代表出版社,例如670 670670代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。

识别码的计算方法如下:

首位数字乘以1 11加上次位数字乘以2 22……以此类推,用所得的结果 $ \bmod 11$,所得的余数即为识别码,如果余数为10 1010,则识别码为大写字母X XX。例如 ISBN 号码0-670-82162-4中的识别码4 44是这样得到的:对0670821629 99个数字,从左至右,分别乘以1 , 2 , … , 9 1,2,\dots,91,2,,9再求和,即0 × 1 + 6 × 2 + … … + 2 × 9 = 158 0\times 1+6\times 2+……+2\times 9=1580×1+6×2+……+2×9=158,然后取158 m o d 11 158 \bmod 11158mod11的结果4 44作为识别码。

你的任务是编写程序判断输入的 ISBN 号码中识别码是否正确,如果正确,则仅输出Right;如果错误,则输出你认为是正确的 ISBN 号码。

输入格式

一个字符序列,表示一本书的 ISBN 号码(保证输入符合 ISBN 号码的格式要求)。

输出格式

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

输入输出样例 #1

输入 #1

0-670-82162-4

输出 #1

Right

输入输出样例 #2

输入 #2

0-670-82162-0

输出 #2

0-670-82162-4

解题思路

  • 将输入的字符串进行遍历,把前9个数字全部存储到动态数组中,随后根据题目要求算出最终结果,进行比对即可

解题时用到的关键方法

  1. 在操作字符串的时候需要先将字符串str转为StringBuilder类型StringBuilder sb = new StringBuilder(str);
  2. 要想取出字符串中的某个字符需要用到charAt()方法,括号内传入要取出的字符的序号char c = str.charAt(i);
  3. 要判断某个字符型是否为数字,可以使用Character类中的isDigit()方法,将字符作为参数传入括号内,返回值为true或falseCharacter.isDigit(c);;也可以使用ASCII的判断方法,只要这个字符的ASCII在0-9的ASCII之间if(c>'0'&&c<='9'){System.out.print("c是数字型字符");
  4. 数字字符与int型的相互转换:如果一个字符是数字型,那么它与int类型之间的相互转化方法为int num=c-'0';char c = (char)(num+'0');
  5. 将字符串转为可进行操作的StringBuilder类型后,要想替换第i个字符,使用setCharAt(index,char),在括号内传入需要替换的字符的序号以及内容即可sb.setCharAt(i,'X');

题解

//package P1055;importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);Stringstr=sc.next();StringBuildersb=newStringBuilder(str);ArrayList<Integer>arr=newArrayList<>();for(inti=0;i<str.length();i++){charc=str.charAt(i);if(Character.isDigit(c)){arr.add(c-'0');}}intsum=0;for(inti=0;i<9;i++){sum+=(i+1)*arr.get(i);}intresult=sum%11;charr=(char)(result+'0');if(result==10){r='X';}if(r==str.charAt(str.length()-1)){System.out.println("Right");}else{sb.setCharAt(str.length()-1,r);System.out.println(sb);}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 5:30:27

三端毕设选题推荐:基于BS架构的积分制零食百货平台购物返积分、积分兑换零食springboot基于B_S架构的积分制零食自选平台【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/17 14:10:59

抱歉,SpringBoot 已经跌出第一梯队!

年底各大厂裁员消息满天飞&#xff0c;看似就业行情见底、机会变少&#xff0c;其实是&#xff1a;程序员的高价值赛道变了&#xff01;2026年&#xff0c;真正稀缺、高薪、抗风险的岗位&#xff0c;只有一个——大模型应用开发工程师&#xff01;百度、华为重组AI项目架构&…

作者头像 李华
网站建设 2026/4/16 8:39:52

Python零基础入门:使用Baichuan-M2-32B开发首个医疗AI应用

Python零基础入门&#xff1a;使用Baichuan-M2-32B开发首个医疗AI应用 1. 为什么选这个组合&#xff1a;Python新手也能上手的医疗AI实践 刚开始学Python时&#xff0c;最怕遇到那种一上来就堆满专业术语的教程。什么"transformer架构"、"tokenization"、…

作者头像 李华
网站建设 2026/4/16 10:17:20

SiameseUIE生产环境部署:/tmp缓存管理+重启不重置稳定性保障

SiameseUIE生产环境部署&#xff1a;/tmp缓存管理重启不重置稳定性保障 1. 为什么在受限云实例上部署SiameseUIE需要特别设计 很多开发者在实际业务中会遇到这样一种典型场景&#xff1a;手头只有一台系统盘小&#xff08;≤50G&#xff09;、PyTorch版本被锁定、且每次重启后…

作者头像 李华