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语言代码:

c 复制代码
#include <stdio.h>
#include <stdlib.h>

void checkISBNCode();

int main () {
    checkISBNCode();
    return 0;
}

void checkISBNCode() {
    int a[9], sum = 0, i, j;
    char b;
    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]);
    scanf("-%c", &b);
    for (i = 0; i < 9; i++) {
        sum = sum + a[i] * (i + 1);
    }
    //j计算出的校验码, b输入的校验码
    j = sum % 11;

    if (j == 10) {
        if (b == 'X') {
            printf("legal");
        } else {
            //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]);
            printf("illegal");
        }
    } else {
        //char加'0',char和int之间的转换
        //'0'的ASCII码 48
        if (b == j + 48) {
            printf("legal");
        } else {
            //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);
            printf("illegal");
        }
    }
}
相关推荐
哈哈哼嘿6 分钟前
C语言:函数指针,数组,结构体
c语言
Ustinian_3102 小时前
【C/C++】For 循环展开与性能优化【附代码讲解】
c语言·开发语言·c++
tt55555555555513 小时前
C/C++嵌入式笔试核心考点精解
c语言·开发语言·c++
科大饭桶14 小时前
C++入门自学Day14-- Stack和Queue的自实现(适配器)
c语言·开发语言·数据结构·c++·容器
肉夹馍不加青椒20 小时前
第三十三天(信号量)
java·c语言·算法
古译汉书21 小时前
嵌入式-SPI番外之按钮驱动程序的编写-Day15
c语言·stm32·单片机·嵌入式硬件·mcu·算法
knd_max21 小时前
C语言:字符函数与字符串函数(1)
c语言
444A4E1 天前
深入理解Linux进程管理:从创建到替换的完整指南
linux·c语言·操作系统
敲上瘾1 天前
Linux I/O 多路复用实战:Select/Poll 编程指南
linux·服务器·c语言·c++·select·tcp·poll
海天胜景1 天前
编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET... 拒绝访问
c语言·windows