c语言图书使用国际标准书号(International Standard Book Number (ISBN-10))来编码,是一个 10 位码。前 9 位(0−9之间的数字)分别用于表示语言、出版商和 图书信息。第 10 位是校验位,可以是0−9之间的数字或者是字母 X (用于表示数字10); ISBN-10码可以通过下面方法进行验证: 首先,对ISBN-10码的各个位按下面的计算式求和: 1×x 1 +2×x 2 +3×x 3 +4×x 4 ⋯+9×x 9 +10×x 10 将求和的结果对11取余数,如果余为0,则说明该ISBN-10码是一个有效码,否则,就不是一个有效的ISBN-10码。 现输入一批ISBN-10图书编码,请你验证该编码是否是有效的国际标准书号。 输入格式: 输入第一行给出正整数N(≤10)是输入的ISBN-10图书编号的个数。随后N行,每行给出1个10位的ISBN-10图书编号。 输出格式: 按照输入的顺序每行输出1个有问题的ISBN-10编码。这里并不检验前9位是否合理,只检查前9位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出 All passed。 输入样例01: 1 0072880082 输出样例01: All passed 输入样例02: 2 0072880082 084930149X 输出样例02: 084930149X 输入样例03: 3 013168728X X615880991 026201A530 输出样例03: X615880991 026201A530
时间: 2024-02-18 08:05:47 浏览: 35
好的,这是一个用于验证ISBN-10编码是否合法的问题。下面是C语言的代码实现:
```c
#include <stdio.h>
#include <string.h>
int main()
{
int n, i, j, sum, flag;
char isbn[11];
scanf("%d", &n);
getchar(); // 接收换行符
for (i = 0; i < n; i++) {
gets(isbn); // 输入ISBN编码
sum = 0;
flag = 0;
// 遍历ISBN编码的前9位
for (j = 0; j < 9; j++) {
if (isbn[j] >= '0' && isbn[j] <= '9') {
sum += (isbn[j] - '0') * (j + 1); // 计算前9位的加权和
} else {
flag = 1; // 标记前9位中是否有非数字字符
break;
}
}
if (flag == 0 && isbn[9] == 'X') { // 第10位为字母X的情况
sum += 10 * 10;
} else if (flag == 0 && isbn[9] >= '0' && isbn[9] <= '9') { // 第10位为数字的情况
sum += (isbn[9] - '0') * 10;
} else { // 第10位为非数字和字母X的情况
flag = 1;
}
if (flag == 0 && sum % 11 == 0) { // ISBN编码合法的情况
continue;
} else { // ISBN编码不合法的情况
printf("%s\n", isbn);
}
}
printf("All passed\n"); // 输出所有编码都合法的情况
return 0;
}
```
该程序的基本思路是:对于每个输入的ISBN-10编码,遍历它的前9位,计算它的加权和,最后再根据第10位的校验码来判断该编码是否合法。如果所有输入的ISBN-10编码都合法,则输出"All passed"。