题目描述
ISBN号码由9个数字字符和一位校验字符组成,校验字符可以是数字或大写字母X。校验规则如下:
其中 是第 位数字,校验字符的值等于 ,当值为10时用X表示。
给定一个可能正确也可能错误的ISBN号码,需要判断其校验码是否正确。
算法思路
- 读取字符串,提取前9位数字和最后一位校验码
- 按公式计算前9位的加权和
- 计算正确的校验值
- 将计算值转换为字符(10对应’X’,其他对应对应数字字符)
- 与输入的校验码比较
代码实现
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);cin.tie(nullptr);
string s;
cin >> s;
int sum = 0;
for(int i = 0; i < 9; i++){
sum += (i + 1) * (s[i] - '0');
}
int correct = (11 - (sum % 11)) % 11;
char correctChar;
if(correct == 10) correctChar = 'X';
else correctChar = '0' + correct;
if(correctChar == s[9]) cout << "Right" << endl;
else {
s[9] = correctChar;
cout << s << endl;
}
return 0;
}关键点
- 校验码计算公式:
- 当计算值为10时,校验字符为’X’
- 错误时需要输出修正后的完整ISBN号码
参考
- CCF-CSP认证