問題の説明
公式に発行された各書籍には、それに対応するISBN番号があります。ISBNコードは、9桁、1つの識別コード、および3つの区切り記号で構成されます。その所定の形式は「x-xxx-xxxxx-x」です。ここで、記号「-」は区切り記号(キーボードのマイナス記号)で、最後の桁は識別コードです(例:0-670-82162-4は標準のISBNコード)。ISBNコードの最初の桁は、本が出版される言語を示します。たとえば、0は英語を表します。最初の区切り記号「-」の後の3桁は出版社を表します。たとえば、670はViking Publishing Houseを表します。2番目の区切り記号の後の5桁は出版社の本の番号を表します。最後の桁は識別コードです。
識別コードの計算方法は次のとおりです。
最初の桁に1を掛け、2番目の桁に2を掛けます。以下同様に、得られた結果mod 11を使用すると、結果の剰余は識別コードとなり、剰余が10の場合、識別コードは大文字X たとえば、ISBN番号0-670-82162-4の識別コード4は、次のように取得されます。9桁の067082162の場合、左から右に、1、2、...、9が乗算され、合計されます。つまり、0× 1 + 6×2 +……+ 2×9 = 158、そして158 mod 11の結果4を識別コードとして受け取ります。
入力したISBN番号の識別コードが正しいかどうかを判断するプログラムを作成し、正しい場合は「正しい」のみを出力し、間違っている場合は正しいISBN番号を出力します。
入力形式
入力は1行のみです。これは、書籍のISBN番号を表す文字のシーケンスです(入力がISBN番号の形式要件を満たしていることを確認するため)。
出力形式
入力ISBN番号識別コードが正しい場合は1行を出力し、「右」を出力します。そうでない場合は、指定された形式に従って正しいISBN番号(区切り文字「-」を含む)を出力します。
サンプル入力
0-670-82162-4
サンプル出力
右
サンプル入力
0-670-82162-0
サンプル出力
0-670-82162-4
体験の概要:
整数を扱うのが面倒な場合は、文字列処理を使用する方が便利です。
覚えておいてください:文字列は特定の文字を個別に置き換えることができます。例:s [i] = '1';(iは文字列の長さの範囲内の任意の値) )
C ++コード:
#include<bits/stdc++.h>
using namespace std;
int main() {
int sum = 0,cnt = 0;
string s;
cin>>s;
for(decltype(s.size()) i=0; i<s.size()-2; i++) {
if(s[i]!='-') {
cnt++;
sum += (s[i]-'0')*cnt;
}
}
sum %= 11;
char check;
if(10 == sum) check = 'X';
else check = sum+'0';
if(check == s[s.size()-1]) cout<<"Right";
else {
//此处可替换成s[s.size()-1] = check;
for(decltype(s.size()) i=0; i<s.size()-1; i++) {
cout<<s[i];
}
cout<<check;
}
return 0;
}