#include <stdio.h>
#include <string.h>
// 计算识别码
char calculate_check_digit(const char* isbn) {
int sum = 0;
for (int i = 0, j = 1; i < 9; i++, j++) {
sum += (isbn[i] - '0') * j;
}
int check_digit = sum % 11;
if (check_digit == 10) {
return 'X';
} else {
return '0' + check_digit;
}
}
int main() {
char isbn[18]; // 输入的ISBN号码,包括分隔符
scanf("%s", isbn);
// 提取前9位数字和输入的识别码
char digits[10];
int index = 0;
for (int i = 0; isbn[i] != '\0'; i++) {
if (isbn[i] >= '0' && isbn[i] <= '9') {
digits[index++] = isbn[i];
}
}
digits[9] = '\0';
// 计算正确的识别码
char correct_check_digit = calculate_check_digit(digits);
// 比较识别码
if (isbn[12] == correct_check_digit) {
printf("Right\n");
} else {
// 输出正确的ISBN号码
printf("%c-%c%c%c-%c%c%c%c%c-%c\n",
digits[0], digits[1], digits[2], digits[3],
digits[4], digits[5], digits[6], digits[7], digits[8],
correct_check_digit);
}
return 0;
}
- 输入处理:使用scanf读取输入的ISBN号码。遍历输入的字符串,提取前9位数字。
- 计算识别码:使用一个循环,从第1位数字开始,依次乘以1到9,并累加结果。对累加结果取模11,得到识别码。如果结果是10,则识别码为'X'。
- 验证识别码:直接比较输入的识别码(即输入字符串的第13个字符)与计算得到的识别码。如果相同,输出“Right”;如果不同,输出正确的ISBN号码。