题解
2026-03-31 19:27:23
发布于:浙江
1阅读
0回复
0点赞
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin>>s;
int sum=0,w=1;
for(int i=0;i<12;++i){
if(s[i]=='-')continue;
sum+=(s[i]-'0')*w++;
}
char c;
int r=sum%11;
if(r==10)c='X';
else c=r+'0';
if(s.back()==c){
cout<<"Right"<<endl;
}else{
s[s.size()-1]=c;
cout<<s<<endl;
}
return 0;
}
问题深度解析
这是一个经典的字符串处理与校验算法问题,核心是根据给定的ISBN规则验证并修正识别码。
核心规则梳理
ISBN格式:x-xxx-xxxxx-x,共13个字符(包括3个分隔符-)
识别码计算规则:
提取前9位数字(忽略分隔符)
第i位数字(从1开始)乘以权重i,求和得到总和S
计算S mod 11的余数R
R=10时识别码为X,否则为R本身
更紧凑的版本(字符数组实现)
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[14];
cin>>s;
int sum=0,w=1;
for(int i=0;i<12;++i){
if(s[i]=='-')continue;
sum+=(s[i]-'0')*w++;
}
char c;
int r=sum%11;
c=r==10?'X':r+'0';
if(s[12]==c)cout<<"Right\n";
else{
s[12]=c;
cout<<s<<'\n';
}
return 0;
}
这里空空如也




有帮助,赞一个