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");
        }
    }
}
相关推荐
Navigator_Z8 小时前
LeetCode //C - 1291. Sequential Digits
c语言·算法·leetcode
水饺编程11 小时前
第2章:Linux 基础,clear 命令
linux·c语言·汇编
无敌贵点大王11 小时前
嵌入式软件面试经(自用)
c语言·stm32·单片机·学习·mongodb·面试·职场和发展
学逆向的12 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全
Zwawa13 小时前
PID 的三个参数之外:位置式、增量式和反馈控制
c语言·单片机·嵌入式
slimer13 小时前
11.C 语言 printf 打印函数详解:格式说明符、宽度精度与安全输出
linux·c语言
老花眼猫15 小时前
曼陀罗2-曼陀罗图案自由创制App
c语言·经验分享·青少年编程·课程设计
爱读书的小胖16 小时前
Codewars: A Brave New Wordle(C)解题分析
c语言·数据结构·算法
Escalating_xu16 小时前
【数据结构】顺序表的应用:动态通讯录项目与双指针经典算法
c语言·数据结构·算法
从小白到软工17 小时前
C语言(中)预告
c语言·数据结构·经验分享·ai编程