验证ISBN号码是否正确的问题,C语言

 

每一本正式出版的图书都有一个 ISBN 号码与之对应。ISBN号码的最后一位数是由前面的各个数通过各种运算得到的,要想验证号码是否正确,则需要利用程序来进行运算。程序代码容易出错的地方便是运算的过程代码。

092823d8c81747cf996e146bfb7c99f0.png

 

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

 

识别码的计算方法如下:

 

首位数字乘以 1加上次位数字乘以 2……以此类推,用所得的结果 模 11,所得的余数即为识别码,如果余数为 10,则识别码为大写字母 X。例如 ISBN 号码 `0-670-82162-4` 中的识别码 4 是这样得到的:对 `067082162` 这 9个数字,从左至右,分别乘以 1,2,……,9 再求和,即 0乘以1+6乘以 2+……+2乘以9=158,然后取 158模11 的结果 4 作为识别码。

 

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

 

## 输入格式

 

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

 

## 输出格式

 

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

 

样例 #1

样例输入 #1

0-670-82162-4

样例输出

Right

 

 

样例 #2

样例输入 #2

0-670-82162-0

 样例输出

0-670-82162-4

 

简洁C语言代码如下:

#include<stdio.h>

int main()

{

    char a[14],b[12]="0123456789X";//a数组    存放 ISBN码,b数组存放ISBN码的最后一位数的可能情况,方便取用

    scanf("%s",a);//按顺序输入ISBN码,包括-

    int i,t=0,j=1;//定义三个变量i,j,t,i做循环变量遍历a数组,j作乘数每次递增1,t用于存放和以及最后取的余数

    for(i=0;i<12;i++)

    {

        if(a[i]=='-')continue;

        t=(t+(a[i]-'0')*(j++));

    }//按题意求和

    t%=11;//取余数

    if(b[t]==a[12])printf("Right");

    else {a[12]=b[t];

    printf("%s",a);}//作最后的判断:余数正确输出Right,不正确则修改a数组中ISBN码的最后一位再输出

    return 0;

}

这类题目只需根据题意找准运算关系,注意好程序的语法还有数据范围,类型等,多多尝试,一步一步很容易得到解决。

喜欢点个赞再走叭ヽ(*゚ー゚*)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值