题目描述
每一本正式出版的书的封底都有一串号码,如ISBN 978-7-121-41489-3,它叫做"国际标准书号"(International Standard Book Number,缩写为ISBN),用来唯一代表一本书。
从2007年1月1日起,国际标准书号升级为13位,这13位数字可以分为5个区(为提高可读性,用连字符“-”将5个区隔开),从左往右,5个区的含义依次如下:
(1)EAN号码段,一共包含3位数字。
(2)国家、语言或区位代码,长度为1-5位,7表示中国大陆。
(3)出版社代码,长度为2-7位,用以识别书籍的出版社。
(4)出版序号,由出版者自行编配,以识别书目或版本。
(5)校验码,一位数字,用以核对书号是否正确。
其中,书号校验码的计算步骤如下:
1、前12个数字交替地乘以权数1和3;
2、所有积相加;
3、总和除以10,得出余数;
4、如果余数为0,则校验码为0。否则用10减去余数,所得的数字就是校验码。
例如:书号为978-7-121-41489-3,校验码3的计算步骤为:
1、9*1、7*3、8*1、7*3、1*1、2*3、1*1、4*3、1*1、4*3、8*1、9*3
2、9*1+7*3+8*1+7*3+1*1+2*3+1*1+4*3+1*1+4*3+8*1+9*3 = 127
3、127%10 = 7
4、10-7 = 3
请编写程序判断输入的ISBN号码中校验码是否正确,如果正确,输出yes。否则输出no。
输入
一行,是一个不含空格字符的字符序列,表示一本书的ISBN号码(题目数据保证输入符合ISBN号码的格式要求)。
输出
一个字符串,如果输入ISBN号码中校验码正确,输出yes;否则输出no。
#include<iostream>
#include<string>
using namespace std;
int a[10001];
int main(){
string n;
cin>>n;
int j=0;
for(int i=0;i<n.size();i++){
if(n[i]>='1' && n[i]<='9'){
a[j]=n[i]-'0';
j++;
}
}
int sum=0;
for(int i=0;i<j-1;i++){
if(i==0 || i%2==0){
sum+=a[i]*1;
}
else{
sum+=a[i]*3;
}
}
sum%=10;
bool flag=false;
if(sum==0){
if(a[j-1]==sum){
flag=true;
}
}
else{
sum=10-sum;
if(a[j-1]==sum){
flag=true;
}
}
if(flag==true){
cout<<"yes";
}
else{
cout<<"no";
}
}