每一本正式出版的图书都有一个 ISBN 号码与之对应。ISBN号码的最后一位数是由前面的各个数通过各种运算得到的,要想验证号码是否正确,则需要利用程序来进行运算。程序代码容易出错的地方便是运算的过程代码。
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;
}
这类题目只需根据题意找准运算关系,注意好程序的语法还有数据范围,类型等,多多尝试,一步一步很容易得到解决。
喜欢点个赞再走叭ヽ(*゚ー゚*)