題目鏈接
題目描述
每一本正式出版的圖書都有一個ISBN號碼與之對應,ISBN碼包括9位數字、1位識別碼和3位分隔符,其規定格式如x-xxx-xxxxx-x,其中符號-就是分隔符(鍵盤上的減號),最后一位是識別碼,例如0-670-82162-4就是一個標準的ISBN碼,ISBN碼的首位數字表示書籍的出版語言,例如0代表英語;第一個分隔符-之后的三位數字代表出版社,例如670代表維京出版社;第二個分隔符后的五位數字代表該書在該出版社的編號;最后一位為識別碼,
識別碼的計算方法如下:
首位數字乘以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 mod11的結果4作為識別碼,
你的任務是撰寫程式判斷輸入的ISBN號碼中識別碼是否正確,如果正確,則僅輸出Right;如果錯誤,則輸出你認為是正確的ISBN號碼,
輸入格式
一個字符序列,表示一本書的ISBN號碼(保證輸入符合ISBN號碼的格式要求),
輸出格式
一行,假如輸入的ISBN號碼的識別碼正確,那么輸出Right,否則,按照規定的格式,輸出正確的ISBN號碼(包括分隔符-),
輸入輸出樣例
輸入 #1
0-670-82162-4
輸出 #1
Right
輸入 #2
0-670-82162-0
輸出 #2
0-670-82162-4
說明/提示
2008普及組第一題
代碼:
//P1055 ISBN號碼
#include<iostream>
#include<cstdio>
using namespace std;
int num[10];
int main()
{
long long int sum = 0;
char c;
scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%1c", &num[0], &num[1], &num[2], &num[3], &num[4], &num[5], &num[6], &num[7], &num[8], &c);
for(int i = 0; i < 9; i++)
{
sum += (i + 1) * num[i];
sum %= 11;
}
if(sum == c - 48) cout << "Right" << endl;
else if(sum == 10 && c == 'X') cout << "Right" << endl;
else
{
if(sum == 10) cout << num[0] << "-" << num[1] << num[2] << num[3] << "-" << num[4] << num[5] << num[6] << num[7] << num[8] << "-X" << endl;
else cout << num[0] << "-" << num[1] << num[2] << num[3] << "-" << num[4] << num[5] << num[6] << num[7] << num[8] << "-" << sum << endl;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262551.html
標籤:其他
