IT评测·应用市场-qidao123.com

标题: C语言---校验ISBN码是否合法 [打印本页]

作者: 宁睿    时间: 2024-12-1 07:53
标题: C语言---校验ISBN码是否合法
校验ISBN码是否合法

问题形貌】旧版(2007年以前)国内ISBN(国际标准图书编号)由四个部分组成:
如:
7-5001-0357-3(《一个国家的成长》,中国对外翻译出版公司,1997.02)
7-5063-3433-x(《霞落燕园》,作家出版社,2005.10)
第一组代表中国大陆;
第二组(4个数字)为出版社代码;
第三组(4个数字)是详细的某一本书;
第四组为第十个数字(1个数字,x代表10),也叫校验码,是由下列公式盘算得出——
校验码=(1第一个数字+2第二个数字+…+9*第九个数字)%11
现需读入恣意一个旧版ISBN"x-xxxx-xxxx-x",编程检查其最后一位校验码是否合法。
如果合法,输出legal;
否则输出illegal。
【输入形式】“x-xxxx-xxxx-x”
【输出形式】legal/illegal
【样例1输入】7-5001-0357-3
【样例1输出】legal
【样例2输入】7-5001-0357-9
【样例2输出】illegal
【样例分析】所有x应属于0-10之间,特别分析:校验码为’x’时,代表数字10.
C语言代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void checkISBNCode();
  4. int main () {
  5.     checkISBNCode();
  6.     return 0;
  7. }
  8. void checkISBNCode() {
  9.     int a[9], sum = 0, i, j;
  10.     char b;
  11.     scanf("%1d-%1d%1d%1d%1d-%1d%1d%1d%1d", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8]);
  12.     scanf("-%c", &b);
  13.     for (i = 0; i < 9; i++) {
  14.         sum = sum + a[i] * (i + 1);
  15.     }
  16.     //j计算出的校验码, b输入的校验码
  17.     j = sum % 11;
  18.     if (j == 10) {
  19.         if (b == 'X') {
  20.             printf("legal");
  21.         } else {
  22.             //printf("%d-%d%d%d%d-%d%d%d%d-X", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);
  23.             printf("illegal");
  24.         }
  25.     } else {
  26.         //char加’0’,char和int之间的转换
  27.         //'0’的ASCII码 48
  28.         if (b == j + 48) {
  29.             printf("legal");
  30.         } else {
  31.             //printf("%d-%d%d%d%d-%d%d%d%d-%d", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], j);
  32.             printf("illegal");
  33.         }
  34.     }
  35. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4