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");
        }
    }
}
相关推荐
qiuiuiu41320 分钟前
正点原子RK3568学习日志-编译第一个驱动程序helloworld
linux·c语言·开发语言·单片机
爱吃橘的橘猫21 分钟前
嵌入式系统与嵌入式 C 语言(2)
c语言·算法·嵌入式
yanqiaofanhua5 小时前
C语言自学--预处理详解
c语言·开发语言
杨福瑞7 小时前
C语言⽂件操作讲解(总)
c语言·开发语言
润 下9 小时前
C语言——深入解析C语言指针:从基础到实践从入门到精通(三)
c语言·开发语言·经验分享·笔记·学习·程序人生·其他
润 下9 小时前
C语言——深入解析C语言指针:从基础到实践从入门到精通(二)
c语言·开发语言·经验分享·笔记·学习·程序人生
say_fall10 小时前
精通C语言(4.四种动态内存有关函数)
c语言·开发语言
小秋学嵌入式-不读研版10 小时前
C65-枚举类型
c语言·开发语言·笔记
FreeBuf_11 小时前
Happy DOM曝CVSS 9.4严重RCE漏洞,PoC已公开(CVE-2025-61927)
java·c语言·c++·python·php
无限进步_11 小时前
【C语言】杨辉三角:数学之美与编程实现的完美结合
c语言·开发语言