識別碼的計算方法如下:
首位數字乘以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號碼。
#include<iostream>
using namespace std;
int main()
{
char input[13];
for(int i=0; i<13; i++)
cin >> input[i];
int digit[9];
int i = 0;
digit[i++] = input[0] - '0';
digit[i++] = input[2] - '0';
digit[i++] = input[3] - '0';
digit[i++] = input[4] - '0';
digit[i++] = input[6] - '0';
digit[i++] = input[7] - '0';
digit[i++] = input[8] - '0';
digit[i++] = input[9] - '0';
digit[i++] = input[10] - '0';
char shibiema = input[12];
int num = (digit[0]*1+digit[1]*2+digit[2]*3+digit[3]*4+digit[4]*5+digit[5]*6+digit[6]*7+digit[7]*8+digit[8]*9)%11;
if(num == 10 && shibiema == 'X' || num == shibiema-'0')
{
cout << "Right";
}
else
{
if(num != 10)
cout << input[0]<<input[1]<<input[2]<<input[3]<<input[4]<<input[5]<<input[6]<<input[7]<<input[8]<<input[9]
<< input[10]<<input[11]<<num;
else
cout << input[0]<<input[1]<<input[2]<<input[3]<<input[4]<<input[5]<<input[6]<<input[7]<<input[8]<<input[9]
<< input[10]<<input[11]<<"X";
}
return 0;
}