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");
        }
    }
}
相关推荐
梵刹古音9 小时前
【C语言】 函数基础与定义
c语言·开发语言·算法
梵刹古音10 小时前
【C语言】 结构化编程与选择结构
c语言·开发语言·嵌入式
爱编码的小八嘎10 小时前
C语言对话-22.想睡觉,偶然
c语言
小乔的编程内容分享站12 小时前
记录使用VSCode调试含scanf()的C语言程序出现的两个问题
c语言·开发语言·笔记·vscode
蓁蓁啊12 小时前
C/C++编译链接全解析——gcc/g++与ld链接器使用误区
java·c语言·开发语言·c++·物联网
我能坚持多久13 小时前
D22—C语言预处理详解:从宏定义到条件编译
c语言·开发语言
代码游侠14 小时前
C语言核心概念复习(一)
c语言·开发语言·c++·笔记·学习
Once_day14 小时前
C++之《Effective C++》读书总结(3)
c语言·c++
梵刹古音15 小时前
【C语言】 递归函数
c语言·数据结构·算法
代码游侠15 小时前
C语言核心概念复习(二)
c语言·开发语言·数据结构·笔记·学习·算法