思路:
根据输入,求出校验位。
检验和和输入的最后一位比较:如果相同,输入 Right
,如果不同,输出正却的ISBN号码。
#include<iostream>
using namespace std;
int main()
{
string s;//保存ISBN 号码
cin >> s;
int check = 0;//
for(int i = 0, k = 1;k <= 9; i++){
char x = s[i];
if(x != '-')
check += (x-'0') * k, k++;
}
check = check % 11;
if((check == 10 && 'X' == s.back()) || check == s.back() - '0')//校验位正确
cout << "Right" << endl;
else//校验位不正确,构造正确的 ISBN 号码并输出
{
if(check == 10)
cout << s.substr(0, 12) + 'X' << endl;
else
cout << s.substr(0, 12) << check << endl;
}
return 0;
}
有问题直接评论即可。
你没有考虑最后一位数字是X的时候的特殊问题
输入:5-179-24949-X
输出:5-179-24949-X
标准答案:Right