Official
A - チェックディジット/check digit Editorial by sugarrr
問題文の指示通りに計算していきましょう。
まず、文字列型で入力を受け取ります。(long long などの整数型で受け取ると、\(S\) の先頭が \(0\) の時に桁数が \(15\) より小さくなり、少しややこしいです。)
変数 \(sum\) を用意します。はじめ \(sum=0\) です。
\(S_0 + S_2 + \dots + S_{12}\) を \(sum\) に加えます。(0-indexedなので、\(1\) 番左の数は \(S_0\) であることに注意しましょう。)
\(sum\) を \(3\) 倍します。
\(S_1 + S_3 + \dots + S_{13}\) を\(sum\) に加えます。
最後に、\(sum\) を\(10\) で割った余りと、\(S_{14}\) が一致するか調べれば良いです。(繰り返しになりますが、0-indexedなので、\(1\) 番右の桁の数は \(S_{14}\) であることに注意しましょう。)
この方針で実装すると、次のようになります。
C++による実装例:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
signed main(){
string s;cin>>s;
ll sum=0;
for(int i=0;i<=13;i+=2){
sum+=s[i]-'0';
}
sum*=3;
for(int i=1;i<=13;i+=2){
sum+=s[i]-'0';
}
sum%=10;
if(sum==s[14]-'0'){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
return 0;
}
posted:
last update: