ISBN号码
题⽬描述
每⼀本正式出版的图书都有⼀个ISBN号码之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的
减号),最后⼀位是识别码,例如0-670-82162-4就是⼀个标准的ISBN码。ISBN码的⾸位数字表⽰书籍的出版语⾔,例如0代表英语;第⼀个分隔符“-”之后的三位数字代
表出版设,例如670代表维京出版社;第⼆个分隔之后的五位数字代表该书在该出版社的编号;最后⼀位为识别码。
识别码计算⽅法如下:
⾸位数字乘以1加上次位数字乘以2……以此类推,所得的结果mod11,所得的余数即为识别码,如果余数为10,则识别码为⼤写字母X。例如ISBN号码0-670-82162-
4中的识别码4是这样得到的:对067082162这9个数字,从左⾄右,分别乘以1,2.,……,9,再求和,即01+62+……+29=158,然后取158mod11的结果4
作为识别码。
你的任务是编写程序判断输⼊的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
输⼊格式
输⼊只有⼀⾏,是⼀个字符序列,表⽰⼀本书的ISBN号码(保证输⼊符合ISBN号码的格式要求)。
输出格式
输出共⼀⾏,假如输⼊的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定格式,输出正确的ISBN号码(包括分隔符“-”)。
【输⼊样例1】
0-670-82162-4
【输⼊样例2】
0-670-82162-0
【输出样例1】
Right
【输出样例2】
0-670-82162-尖椒大肠 4
code
code1:
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
inta[10];
intmain()
{
strings;
cin>>s;
a[0]=s[0]-'0';
a[1]=s[2]-'0';
a[2]=s[3]-'0';
a[3]=s[4]-'0';
a[4]=s[6]-'0';
a[5]=s[7]-'0';
a[6]=s[8]-'0';
a[7]=s[9]-'0';
a[8]=s[10]-'0';
a[9]=s[12]-'0';
intsum=0;
for(inti=0,j=1;i<9;i++,j++)
{
sum+=a[i]*j;
}
intcode=sum%11;
charc=code==10?'X':'0'+code;
if(s[12]==c)
{
cout<<"Right"<
}el
{
s[12]=c;
cout<
}
return0;
}
code2:
#include
#include
#include
#include
usingnamespacestd;
intmain(){
stringstr1;
intlen=13;
intz,i,sum,now;
sum=0;
now=0;
z=0;
cin>>str1;
for(i=0;i
if(str1[i形容人的句子 ]!='-'){
now=str1[i]-'0';
z++;
if(i!=len-1)sum=sum+z*now;
}
}
if(反思报告 str1[len-1]=='X')now=10;
elnow=str1[len-1]-'0';
if(sum%11=铁杵成针的故事 =now)
cout<<"Right"<
el{
sum=sum%11;
for(i=0;i
cout<
if(sum!=10)
cout<
elcout<<"X"<
}
return0;
}
code3:
vector
vector
vector
intspecial=0,i,j,k;
charc;
k=strlen(p);
if(k<13){
cout<<"it'swrong!"<
_back('w');
returnoutput;
}
for(i=0;i<12;i++){
c=p[i];
if(c=='-')_back('-');
el{
j=c-'0';
_back(j);
_back(c);
}
}
c=p[12];
for(i=0;i<();i++)special+=input[i]*(i+1);
special=special%11;
if(special+'0'==c){
();
_back('R');
_back('i');
_back('g');
_back('h');
_back('t');
returnoutput;
}
if(special==10)_back('X');
_back(special+'0');
returnoutput;
}
code4:
/**************************************************************************绍兴文理学院是几本 **/
/*
/****************************************************************************/
#include
usingnamespacestd;
voidISBN(){
//freopen("","r",stdin);
//FILE*fp=fopen("","w");
inta[13];
charc;
charinput[14];
for(inti=0,j=0;i<10;j++){
cin>>c;
input[j]=c;
if(c!='-'){
if(c=='X')
a[i]=10;
el
a[i]=c-'0';
i++;
}
}
intsum=0;
for(inti=0;i<9;i++){
a[i]*=i+1;
sum+=a[i];
}
intidCode=sum%11;
if(idCode==a[9])
cout<<"Right"<
el{
for(intj=0;j<12;j++)
cout<
if(idCode==10)
cout<<"X"<
//cout<<'X'<
el
cout<
}
/*if(idCode==a[9])
fprintf(fp,"%s","Rightn");
el{
for(intj=0;j<12;j++)
fprintf(fp,"%c",input[j]);
if(idCode==10)
fprintf(fp,"%cn",'X');
el
fprintf(fp,"%dn",idCode);
}
*/
//fclo(fp);
//fclo(stdin);
}
intmain大卡车简笔画 (){
ISBN();
return0;
}
注意:
输⼊最后⼀个字符可能是X
附:
ISBN的构成及新旧ISBN校验码的计算⽅法
ISBN号码由10位数字组成,并以三条线段加以分割,每组数字都有不同的含义。
第⼀组:区位代码0,1:英⽂2:法⽂3:德⽂4:⽇⽂5:俄⽂7:中⽂
第⼆组:出版社代码由各国的ISBN码分配中⼼,分给各个出版社。
第三组:书序码该出版物代码,由出版社具体给出
第四组:计算机校验码只有⼀位,从0到10,10由X代替。
校验码的计算⽅法
1.假设某ISBN号码前9位是:7-309-04547;
2.计算加权和S=710+39+08+97+06+45+54+43+72=226;
3.计算S11的余数M=226mod11=6;
4.计算11-M的差N=11−6=5
如果N=10,校验码是字母“X”;
如果N=11,校验码是数字“0”;
如果N为其他数字,校验码是数字N。
所以,本书的校验码是5。
ISBN中⼼于2004年决定在ISBN的基础上再添加⼀组三位数字在最前,即將现有的10位书号前⾯加上“978”及重新计算稽核号,以转换为新的13位格式。该计划将于2007
年实施。
注释
13位ISBN的最后⼀位校验位的加权算法与10位ISBN的算法不同。具体算法是:⽤1分别乘ISBN的前12位中的奇数位,⽤3乘以偶数位,成绩之和以10为模,⽤10减去此模,
即可得到校验位的值,其值范围应该为0-9。
1.假设某13位ISBN号码前12位是:987-7-309-04547;
2.位置为123-4-567难忘的事作文400字 -89(10)(11)(12)
3.计算加权和S=91+83+71+73+31+03+91+03+41+53+41+73=117;
4.计算S10的余数M=117mod10=7;
5.计算10-M的差N=10−7=3(如果10-M的值为10则校验码取0)
6.所以,本书的13位ISBN的校验码是3。
from:
/pipisorry/article/details/38959031
ref:
ISBN的构成及新旧ISBN校验码的计算⽅法/s/blog_
ISBN编号问题
/link?url=qmrPPsRjENp5vUNG-wfwdYYG20lCqr3oC5-jLgfVLksVCopMgIcnONlXmI56p8aHJ3L0W94gWD5o3MfMD0vi9TkC5rMyzT6pSqsv-rqQXcm
本文发布于:2023-03-19 01:45:55,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1679161555148899.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:什么是isbn.doc
本文 PDF 下载地址:什么是isbn.pdf
留言与评论(共有 0 条评论) |