题解 | [NOIP2008]ISBN号码
[NOIP2008]ISBN号码
https://www.nowcoder.com/practice/95712f695f27434b9703394c98b78ee5
#include <stdio.h>
int main() {
char arr[13];//题目需要创建13个字符(包含数字);
int i, j; //创建两个变量用于实现循环(数组遍历);
int sum = 0; //求和变量
scanf("%s", arr); //向数组输入数据;
for (i = 0, j = 1; i < 11;
i++) { //这里是为了取出9位数字乘1、2、3、4、5.....9的和;
if (arr[i] != '-') { //判断字符为- 不做计算;
sum += (arr[i] - '0') *
j; //这里求和,减'0'为了将输入字符转为数字;
j++;
}
}
int qy = sum % 11; // 计算校验和模11的结果
// 获取输入的校验码(最后一个字符)
char check_char = arr[12];
// 判断计算结果与输入是否一致
if ((qy == 10 && check_char == 'X') || (qy == check_char - '0')) {
printf("Right");
} else {
// 输出前12个字符(原ISBN的前缀)
for (i = 0; i < 12; i++) {
printf("%c", arr[i]);
}
// 根据计算结果输出正确的校验码
if (qy == 10) {
printf("X");
} else {
printf("%d", qy);
}
}
return 0;
}


查看18道真题和解析