CCF-CSP 201312-2 ISBN番号

問題の説明
  公式に発行された各書籍には、それに対応する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;
}
公開された111元の記事 ウォンの賞賛2 ビュー3533

おすすめ

転載: blog.csdn.net/m0_38088647/article/details/100523201