识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出是正确的ISBN号码。
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <string>
using namespace std;
char a[10];
int main (){
string s;
cin>>s;
int count = 0;
for(int i = 0;i < s.size();i++){
if(s[i] != '-')
a[count++] = s[i];
}
int sum = 0;
for(int i = 0;i < 9;i++){
sum+=(a[i] - '0')*(i+1);
}
if(sum%11 == 10){
if(a[9] == 'X') printf("Right");
else{
s[12] = 'X';
cout<<s;
}
}
else{
if((a[9] - '0' )== sum%11)printf("Right");
else{
s[12] = sum%11+'0';
cout<<s;
}
}
return 0;
}