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语言代码:
#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");
}
}
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4