C++ L14 13位ISBN号码的校验码


题目描述

每一本正式出版的书的封底都有一串号码,如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";
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值